Separação do esquema de usuário

O comportamento de esquemas mudou no SQL Server 2005. Os esquemas não são mais equivalentes a usuários de banco de dados; agora, cada esquema é um namespace distinto que existe independentemente do usuário do banco de dados que o criou. Em outras palavras, um esquema é simplesmente um contêiner de objetos. Um esquema pode ser de propriedade de qualquer usuário e sua propriedade é transferível.

Novo comportamento

A separação de propriedade de esquemas tem implicações importantes:

  • Propriedade de esquemas e protegíveis de escopo de esquema são transferíveis. Para obter mais informações, consulte ALTER AUTHORIZATION (Transact-SQL).

  • Objetos podem ser movimentados entre esquemas. Para obter mais informações, consulte ALTER SCHEMA (Transact-SQL).

  • Um único esquema pode conter objetos de propriedade de vários usuários de banco de dados.

  • Vários usuários de banco de dados podem compartilhar um único esquema padrão.

  • Permissões de esquemas e protegíveis contidos em esquema podem ser gerenciados com maior precisão que em versões anteriores. Para obter mais informações, consulte Permissões de esquema GRANT (Transact-SQL) e Permissões de objeto GRANT (Transact-SQL).

  • Um esquema pode ser propriedade de qualquer banco de dados principal. Isso inclui funções e funções de aplicativo.

  • Um usuário de banco de dados pode ser descartado sem descartar objetos em um esquema correspondente.

  • Códigos gravados em versões anteriores do SQL Server podem retornar resultados incorretos, caso o código assuma que os esquemas são equivalentes aos usuários do banco de dados.

  • Exibições do catálogo criadas para versões anteriores do SQL Server podem retornar resultados incorretos. Isso inclui sysobjects.

  • Ao criar um objeto de banco de dados, se você especificar uma entidade de segurança de domínio válida (usuário ou grupo) como proprietária do objeto, a entidade de segurança de domínio será adicionada ao banco de dados como um esquema. O novo esquema pertencerá a essa entidade de segurança de domínio.

A partir do SQL Server 2005, os esquemas são entidades explícitas refletidas em metadados. Como resultado, os esquemas só podem ter um proprietário, mas um único usuário pode possuir vários esquemas ou nenhum. Essa relação complexa não se reflete nas tabelas do sistema do SQL Server 2000, portanto o SQL Server 2005 apresentou novas exibições do catálogo que refletem com precisão os novos metadados.

A tabela a seguir mostra o mapeamento entre as tabelas do sistema do SQL Server 2000 e o SQL Server 2005 equivalente e exibições do catálogo posteriores.

Tabelas do sistema SQL Server 2000

SQL Server 2005 e exibição do catálogo posterior

sysusers

sys.database_principals

sys.schemas

syslogins

sys.server_principals

O SQL Server 2005 introduziu mais de 250 novas exibições do catálogo. É altamente recomendável que você use as novas exibições do catálogo para acessar metadados. Para obter mais informações, consulte Exibições de catálogo (Transact-SQL).

Novas instruções DDL podem introduzir complexidades em metadados do sistema que não sejam refletidas com precisão em exibições do catálogo antigas, como sysobjects. No exemplo a seguir, a ID do usuário e o nome do esquema retornados por sysobjects estão fora de sincronia e não refletem a diferença entre o usuário e o esquema introduzido no SQL Server 2005.

USE tempdb
GO
CREATE LOGIN u1 WITH PASSWORD = 'Mdfjd$sakj943857l7sdfh##30'
CREATE USER u1 WITH DEFAULT_SCHEMA = u1
GO
GRANT CREATE TABLE to u1 
GO
CREATE SCHEMA sch1
GO
CREATE SCHEMA u1 AUTHORIZATION u1
GO
EXECUTE AS user = 'u1'
GO
CREATE TABLE t1(c1 int)
GO
revert
GO
SELECT user_name(uid) , * FROM sysobjects WHERE name = 't1'
GO
Observação sobre cuidadosCuidado

Você deve usar as novas exibições do catálogo em qualquer banco de dados nos quais qualquer uma das seguintes instruções DDL nunca foi usada: CREATE/ALTER/DROP SCHEMA; CREATE/ALTER/DROP USER; CREATE/ALTER/DROP ROLE; CREATE/ALTER/DROP APPROLE; ALTER AUTHORIZATION.

Esquemas padrão

Para resolver os nomes dos protegíveis que não são nomes completamente qualificados, o SQL Server 2000 usa a resolução de nomes para verificar o esquema pertencente ao usuário do banco de dados que faz a chamada e o esquema pertencente ao dbo.

A partir do SQL Server 2005, cada usuário tem um esquema padrão. O esquema padrão pode ser definido e alterado com a opção DEFAULT_SCHEMA de CREATE USER ou ALTER USER. Se DEFAULT_SCHEMA for deixado indefinido, o usuário do banco de dados terá dbo como seu esquema padrão.