De que servem os esquemas do servidor SQL?

não sou principiante em usar bases de dados SQL, e em particular o servidor SQL. No entanto, eu tenho sido principalmente um SQL 2000 cara e eu sempre fui confuso por esquemas em 2005+. Sim, eu sei A definição básica de um esquema, mas para que eles realmente são usados em um típico servidor SQL implantação?

Sempre usei o esquema padrão. Porque haveria de querer criar esquemas especializados? Porque atribuiria algum dos esquemas incorporados?

Editar: para clarificar, acho que estou a olhar para os benefícios dos regimes. Se você só vai usá-lo como um esquema de segurança, parece que os papéis da base de dados já preencheram isso.. er.. hum.. funcao. E usá-lo como um especificador de espaço de nomes parece ter sido algo que você poderia ter feito com a propriedade (dbo versus usuário, etc..).

Acho que o que quero dizer é, o que os esquemas fazem que não se podem fazer com donos e papéis? Quais são os benefícios específicos?

Author: Alexander Derck, 2009-02-09

11 answers

Esquemas como logicamente tabelas de grupos, procedimentos, vistas em conjunto. Todos os objectos relacionados com os empregados do esquema employee, etc.

Você também pode dar permissões a apenas um esquema, de modo que os usuários só podem ver o esquema a que eles têm acesso e nada mais.

 137
Author: SQLMenace, 2016-01-11 08:54:42
Tal como o espaço de nomes dos códigos C#.
 30
Author: airbai, 2010-09-06 08:28:16

Eles também podem fornecer uma espécie de proteção de colisão de nome para dados de plugin. Por exemplo, o novo recurso de captura de dados de mudança no SQL Server 2008 coloca as tabelas que ele usa em um esquema cdc separado. Desta forma, eles não têm que se preocupar com um conflito de nome entre uma tabela CDC e uma tabela real usada na base de dados, e por essa matéria pode deliberadamente sombra os nomes das tabelas reais.

 27
Author: Joel Coehoorn, 2017-07-12 15:03:32

Eu sei que é um tópico antigo, mas acabei de ver os esquemas e acho que o seguinte pode ser outro bom candidato para o uso do esquema:

Numa Datawarehouse, com dados provenientes de diferentes fontes, pode usar um esquema diferente para cada fonte e, por exemplo, controlar o acesso com base nos esquemas. Também evita as possíveis colisões de nomes entre as várias fontes, como outro pôster respondeu acima.

 15
Author: tobi18, 2010-12-16 07:29:49

Se mantiver o seu esquema discreto, poderá escalar uma aplicação através da aplicação de um dado esquema a um novo servidor DB. (Isto assume que você tem um aplicativo ou sistema que é grande o suficiente para ter funcionalidade distinta).

Um exemplo, considere um sistema que executa o registo. Todas as tabelas de registro e SPs estão no esquema [logging]. Logging é um bom exemplo porque é raro (se alguma vez) que outras funcionalidades do sistema se sobrepõem (que é juntar a) objetos no esquema de Registo.

Uma dica para usar esta técnica -- tem um texto de ligação diferente para cada esquema na sua aplicação / Sistema. Em seguida, você implanta os elementos do esquema para um novo servidor e altera o seu texto de conexão quando você precisa escalar.

 8
Author: Hogan, 2011-12-27 18:33:21
Neste caso, concordo com o Brent... veja esta discussão aqui. http://www.brentozar.com/archive/2010/05/why-use-schemas/ Em resumo... os esquemas não são muito úteis, excepto em casos de uso muito específicos. Torna as coisas confusas. Não os utilize se o puder evitar. E tente obedecer a regra K(eep) I(t) s(imple) s(tupid).
 7
Author: sam yi, 2018-03-14 00:13:11
Não vejo a vantagem em eliminar os utilizadores ligados a esquemas. Eis o porquê....

A maioria das pessoas liga as suas contas de Utilizador às bases de dados através de papéis inicialmente, assim que atribuir um Utilizador quer ao sysadmin, quer ao DB_ proprietário da base de dados, de qualquer forma, essa conta ou é aliada à conta de utilizador "dbo", ou tem permissões completas numa base de dados. Uma vez que isso ocorre, não importa como você se atribui a um esquema além do seu esquema padrão (que tem o mesmo nome que o seu usuário conta), esses direitos dbo são atribuídos aos objetos que você cria sob o seu usuário e esquema. É inútil.....e apenas um espaço de nomes e confunde a verdadeira propriedade desses objectos. Na minha opinião, é um mau design....quem o desenhou.

O que eles deveriam ter feito era criar "grupos" , e jogar fora esquemas e papel e apenas permitir que você agrupar grupos de grupos em qualquer combinação que você gosta, então em cada nível diga ao sistema se as permissões são herdadas, negadas, ou reescritas com personalizadas. Isso teria sido muito mais intuitivo e permitiu que a DBA controlasse melhor quem são os verdadeiros donos desses objetos. Neste momento está implícito na maioria dos casos o usuário padrão do servidor SQL do dbo tem esses direitos....não o utilizador.

 6
Author: stormy, 2012-10-22 22:01:06
Numa loja da ORACLE onde trabalhei durante muitos anos, esquemas foram usados para encapsular procedimentos (e pacotes) que se aplicavam a diferentes aplicações front-end. Um esquema " API " diferente para cada aplicação muitas vezes fazia sentido, já que os casos de uso, usuários e requisitos do sistema eram bastante diferentes. Por exemplo, um esquema de' API ' foi para uma aplicação de desenvolvimento/configuração apenas para ser usado por desenvolvedores. Outro esquema 'API' foi para acessar os dados do cliente através de visualizações e procedimentos (pesquisa). Outro esquema' API ' de código encapsulado que foi usado para sincronizar o desenvolvimento / configuração e dados do cliente com uma aplicação que tinha seu próprio banco de dados. Alguns destes regimes "API", ao abrigo das capas, continuariam a partilhar procedimentos e funções comuns entre si (através de outros regimes "comuns"), sempre que tal fizesse sentido. Eu direi que não ter um esquema provavelmente não é o fim do mundo, embora possa ser muito útil. Realmente, é a falta de pacotes em SQL Servidor que realmente cria problemas na minha mente... mas esse é um tema diferente.
 6
Author: L. L. Learner, 2012-11-02 18:47:01

Acho que os esquemas são como um monte de novas funcionalidades (seja para o servidor SQL ou qualquer outra ferramenta de software). Você precisa avaliar cuidadosamente se o benefício de adicioná-lo ao seu kit de desenvolvimento compensa a perda de simplicidade no design e implementação.

Parece-me que os esquemas são aproximadamente equivalentes a espaços de nomes opcionais. Se você está em uma situação em que os nomes de objetos estão colidindo e a granularidade das permissões não é suficiente, aqui está uma ferramenta. (Eu estaria inclinado a dizer pode haver questões de design que devem ser tratadas a um nível mais fundamental em primeiro lugar.)

O problema pode ser que, se ele está lá, alguns desenvolvedores vão começar casualmente a usá-lo para benefício de curto prazo; e uma vez que ele está lá, ele pode se tornar kudzu.

 4
Author: dkretz, 2009-02-09 18:48:17

No SQL Server 2000, os objectos criados estavam ligados a esse utilizador em particular, como se um utilizador, digamos, O Sam cria um objecto, digamos, Empregados, que a mesa apareceria como o Sam.Funcionario. O sobre se o Sam está a deixar o compnay ou se muda para outra área de negócios. Assim que apagar o utilizador Sam, o que aconteceria ao Sam.Mesa de empregados? Provavelmente, terias de mudar de roupa. a posse primeiro do Sam.Empregados para dbo.Empregada. O Schema fornece uma solução para supere este problema. Andre pode criar todos os seus objetos dentro de um esquema como Emp_Schema. Agora, se ele cria um objeto Empregados dentro do Emp_Schema então o objeto seria referido como Emp_Schema.Funcionario. Mesmo que a conta de usuário Sam precisa ser excluído, o o esquema não seria afectado.

 3
Author: Tariq Awan, 2011-06-28 06:45:52
Desenvolvimento - cada um dos nossos devs tem o seu próprio esquema como caixa de areia para jogar.
 0
Author: Nick Van Brunt, 2009-02-09 17:53:44