Ler em inglês

Compartilhar via


Propriedade e separação do esquema do usuário no SQL Server

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics PDW (Analytics Platform System) Banco de Dados SQL no Microsoft Fabric

Um conceito central de segurança do SQL Server é que os proprietários de objetos têm permissões irrevogáveis administrá-los. Você não pode remover os privilégios de um proprietário de objeto nem pode eliminar usuários de um banco de dados se eles tiverem objetos nele.

Separação do esquema de usuário

A separação do esquema do usuário permite maior flexibilidade em gerenciar permissões do objeto de banco de dados. Um esquema é um contêiner nomeado para objetos de banco de dados, que permite que você agrupe objetos em namespaces separados. Por exemplo, o banco de dados de exemplo AdventureWorks contém esquemas para Production, Sales e HumanResources.

A sintaxe de nomeação de quatro partes para referir-se a objetos especifica o nome do esquema.

SQL
Server.Database.DatabaseSchema.DatabaseObject

Proprietários e permissões do esquema

Os esquemas podem ser de propriedade de qualquer entidade de banco de dados, e uma única entidade pode ter vários esquemas. Você pode aplicar regras de segurança a um esquema, que são herdadas por todos os objetos no esquema. Depois que você configurar permissões de acesso para um esquema, essas permissões serão aplicadas automaticamente à medida que novos objetos forem adicionados ao esquema. Os usuários podem ser atribuídos a um esquema padrão, e vários usuários do banco de dados podem compartilhar o mesmo esquema.

Por padrão, quando os desenvolvedores criam objetos em um esquema, os objetos são possuídos pela entidade de segurança que possui o esquema, não pelo desenvolvedor. A propriedade do objeto pode ser transferida com a instrução ALTER AUTHORIZATION do Transact-SQL. Um esquema também pode conter objetos de propriedade de diferentes usuários e ter as permissões mais granulares que as atribuídas ao esquema, embora isso não seja recomendado porque adiciona complexidade a permissões de gerenciamento. Os objetos podem ser movidos entre esquemas e a propriedade do esquema pode ser transferida entre entidades de segurança. Os usuários do banco de dados podem ser removidos sem afetar esquemas.

Esquemas internos para compatibilidade com versões anteriores

O SQL Server é fornecido com nove esquemas predefinidos que têm os mesmos nomes que os usuários e funções de banco de dados internos: db_accessadmin, db_backupoperator, db_datareader, db_datawriter, db_ddladmin, db_denydatareader, db_denydatawriter, db_owner, db_securityadmin. Eles existem para compatibilidade com versões anteriores. A recomendação é não usá-los para objetos de usuário. Você pode descartar os esquemas que têm os mesmos nomes que as funções de banco de dados fixas, a menos que eles já estejam em uso; nesse caso, drop-command retornará um erro e bloqueará o descarte do esquema usado.

SQL
IF EXISTS (SELECT * FROM sys.schemas WHERE name = N'db_accessadmin')
DROP SCHEMA [db_accessadmin]
GO

IF EXISTS (SELECT * FROM sys.schemas WHERE name = N'db_backupoperator')
DROP SCHEMA [db_backupoperator]
GO

IF EXISTS (SELECT * FROM sys.schemas WHERE name = N'db_datareader')
DROP SCHEMA [db_datareader]
GO

IF EXISTS (SELECT * FROM sys.schemas WHERE name = N'db_datawriter')
DROP SCHEMA [db_datawriter]
GO

IF EXISTS (SELECT * FROM sys.schemas WHERE name = N'db_ddladmin')
DROP SCHEMA [db_ddladmin]
GO

IF EXISTS (SELECT * FROM sys.schemas WHERE name = N'db_denydatareader')
DROP SCHEMA [db_denydatareader]
GO

IF  EXISTS (SELECT * FROM sys.schemas WHERE name = N'db_denydatawriter')
DROP SCHEMA [db_denydatawriter]
GO

IF  EXISTS (SELECT * FROM sys.schemas WHERE name = N'db_owner')
DROP SCHEMA [db_owner]
GO

IF EXISTS (SELECT * FROM sys.schemas WHERE name = N'db_securityadmin')
DROP SCHEMA [db_securityadmin]
GO

Se você remover esses esquemas do banco de dados model, eles não aparecerão em novos bancos de dados. Não é possível descartar esquemas que contêm objetos.

Os seguintes esquemas não podem ser descartados:

  • dbo
  • guest
  • sys
  • INFORMATION_SCHEMA

Observação

Os esquemas sys e INFORMATION_SCHEMA são reservados para objetos do sistema. Você não pode criar objetos nesses esquemas e não pode removê-los.

O esquema dbo

O esquema dbo é o esquema padrão de cada banco de dados. Por padrão, os usuários criados com o comando CREATE USER do Transact-SQL têm dbo como o esquema padrão. O esquema dbo é de propriedade da conta de usuário do dbo.

Os usuários que recebem dbo como esquema padrão não herdam as permissões da conta de usuário do dbo. Nenhuma permissão é herdada de um esquema por usuários; as permissões de esquema são herdadas pelos objetos de banco de dados contidos no esquema. O esquema padrão de um usuário é usado somente para referência de objeto, caso o usuário omita o esquema ao consultar objetos.

Observação

Quando os objetos de banco de dados são referenciados usando um nome de uma parte, o SQL Server primeiro procura no esquema padrão do usuário. Se o objeto não for encontrado lá, o SQL Server procurará em seguida no esquema dbo. Se o objeto não estiver no esquema dbo, um erro será retornado.