Separação do esquema de usuário
O comportamento de esquemas alterado 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.
Novas exibições do catálogo
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 usuário único pode ter 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 apresentou 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 do catálogo (Transact-SQL).
Novas instruções DDL podem apresentar complexidades nos metadados do sistema que não estejam refletidos com precisão em exibições do catálogo antigas, como sysobjects. Neste exemplo, 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 apresentada 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
Cuidado |
---|
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 nome para verificar o esquema de propriedade do usuário do banco de dados que faz a chamada e o esquema de propriedade do dbo.
A partir do SQL Server 2005, cada usuário tem um esquema padrão. O esquema padrão pode ser definido e alterado usando a opção DEFAULT_SCHEMA de CREATE USER ou ALTER USER. Se DEFAULT_SCHEMA for deixado sem definição, o usuário de banco de dados terá dbo como seu esquema padrão.
Consulte também