Funções de nível de banco de dados

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)

Para gerenciar com facilidade as permissões no bancos de dados, o SQL Server fornece várias funções que são entidades de segurança que agrupam outras entidades. Elas são como grupos no sistema operacional Windows. As funções de nível de banco de dados são permitidas em todo banco de dados em seus escopos de permissões.

Para adicionar e remover usuários de uma função de banco de dados, use as opções ADD MEMBER e DROP MEMBER da instrução ALTER ROLE . O Analytics Platform System (PDW) e o Azure Synapse Analytics não dão suporte ao uso de ALTER ROLE. Em vez disso, use os antigos procedimentos sp_addrolemember e sp_droprolemember .

Há dois tipos de funções no nível do banco de dados: funções de banco de dados fixas, que são predefinidas no banco de dados, e funções de banco de dados definidas por usuário, que você pode criar.

As funções de banco de dados fixas são definidas no nível de banco de dados e existem em cada banco de dados. Os membros da função de banco de dados db_owner podem gerenciar a associação de funções de banco de dados fixas. Também há algumas funções de banco de dados com finalidade especial no banco de dados msdb.

Você pode adicionar qualquer conta de banco de dados e outras funções do SQL Server nas funções de nível de banco de dados.

Dica

Não adicione funções de banco de dados definidas pelo usuário como membros de funções fixas. Isso poderia habilitar o escalonamento não intencional de privilégios.

As permissões de funções de banco de dados definidas pelo usuário podem ser personalizadas com instruções GRANT, DENY e REVOKE. Para obter mais informações, consulte Permissões (Mecanismo de Banco de Dados).

Para obter uma lista de todas as permissões, consulte o cartaz Permissões do Mecanismo de Banco de Dados . Não é possível conceder permissões em nível de servidor às funções de banco de dados. Logons e outras entidades em nível de servidor, como funções de servidor, não podem ser adicionados às funções de banco de dados. Para a segurança em nível de servidor no SQL Server, use funções de servidor. As permissões em nível de servidor não podem ser concedidas por meio das funções no banco de dados SQL do Azure e no Azure Synapse Analytics.

Funções de banco de dados fixas

A tabela a seguir mostra as funções de banco de dados fixas e suas funcionalidades. Essas funções existem em todos os bancos de dados. Exceto para a função de banco de dados public, as permissões atribuídas às funções de banco de dados fixas não podem ser alteradas.

Nome da função de banco de dados fixa Descrição
db_owner Os membros da função de banco de dados fixa db_owner podem executar todas as atividades de configuração e manutenção no banco de dados, bem como DROP o banco de dados no SQL Server. (No banco de dados SQL e no Azure Synapse, algumas atividades de manutenção exigem permissões em nível de servidor e não podem ser executadas por db_owners.)
db_securityadmin Os membros da função de banco de dados fixa db_securityadmin podem modificar a associação de função somente para funções personalizadas e gerenciar permissões. Membros dessa função têm o potencial de elevar seus privilégios e suas ações devem ser monitoradas.
db_accessadmin Os membros da função de banco de dados fixa db_accessadmin podem adicionar ou remover o acesso ao banco de dados para logons do Windows, grupos do Windows e logons do SQL Server.
db_backupoperator Os membros da função de banco de dados fixa db_backupoperator podem fazer backup do banco de dados.
db_ddladmin Os membros da função de banco de dados fixa db_ddladmin podem executar qualquer comando Data Definition Language (DDL) em um banco de dados. Os membros dessa função podem elevar seus privilégios manipulando código que pode ser executado sob altos privilégios, e suas ações devem ser monitoradas.
db_datawriter Os membros da função de banco de dados fixa db_datawriter podem adicionar, excluir ou alterar dados em todas as tabelas de usuário. Na maioria dos casos de uso, essa função é combinada com a associação db_datareader para permitir a leitura dos dados que serão modificados.
db_datareader Os membros da função de banco de dados fixa db_datareader podem ler todos os dados de todas as tabelas de usuário e exibições. Os objetos de usuário podem existir em qualquer esquema, exceto sys e INFORMATION_SCHEMA.
db_denydatawriter Os membros da função de banco de dados fixa db_denydatawriter não podem adicionar, modificar ou excluir dados nas tabelas de usuário de um banco de dados.
db_denydatareader Os membros da função de banco de dados fixa db_denydatareader não podem ler dados das tabelas de usuário e exibições de um banco de dados.

Não é possível alterar as permissões atribuídas às funções de banco de dados fixas. A seguinte figura mostra as permissões atribuídas às funções de banco de dados fixas:

Diagrama de permissões das funções de banco de dados fixas.

Funções especiais para o Banco de Dados SQL do Azure e o Azure Synapse

Essas funções de banco de dados existem somente no banco de dados master virtual. As permissões são restritas às ações executadas em master. Somente os usuários de banco de dados em master podem ser adicionados a essas funções. Não é possível adicionar logons a essas funções, mas é possível criar usuários com base nos logons, e esses usuários podem ser adicionados às funções. Os usuários de banco de dados independentes em master também podem ser adicionados a essas funções. Porém, os usuários de banco de dados adicionados contidos na função dbmanager em master não podem ser usados para criar novos bancos de dados.

Nome da função Descrição
dbmanager Pode criar e excluir bancos de dados. Um membro da função dbmanager que cria um banco de dados se torna o proprietário desse banco de dados, o que permite ao usuário se conectar ao banco de dados como o usuário dbo. O usuário dbo tem todas as permissões de banco de dados no banco de dados. Os membros da função dbmanager não têm necessariamente permissão para acessar bancos de dados que eles não possuem.
db_exporter Os membros da função de banco de dados fixa db_exporter podem realizar todas as atividades de exportação de dados. As permissões concedidas por meio dessa função são CREATE TABLE, ALTER ANY SCHEMA, ALTER ANY EXTERNAL DATA SOURCE e ALTER ANY EXTERNAL FILE FORMAT.

Aplica-se a: pools de SQL dedicados do Azure Synapse Analytics (antes conhecido como SQL DW)
loginmanager Pode criar e excluir logons no banco de dados master virtual.

Observação

A entidade de segurança no nível do servidor e o administrador do Microsoft Entra (se estiver configurado) têm todas as permissões no banco de dados SQL e no Azure Synapse Analytics sem precisar ser membros das funções. Para obter mais informações, confira Autorizar acesso ao Banco de Dados SQL, à Instância Gerenciada de SQL e ao Azure Synapse Analytics.

Algumas funções de banco de dados não são aplicáveis ao SQL do Azure ou Azure Synapse:

  • db_backupoperator não é aplicável no banco de dados SQL do Azure (Instância Gerenciada de SQL que não é do Azure) e no pool sem servidor do Azure Synapse Analytics porque os comandos do T-SQL de backup e restauração não estão disponíveis.

  • db_datawriter e db_denydatawriter não são aplicáveis ao Azure Synapse Analytics sem servidor porque ele apenas lê dados externos.

Funções do banco de dados msdb

O banco de dados msdb contém as funções com finalidade especial que são mostradas na tabela a seguir.

Nome da função msdb Descrição
db_ssisadmin
db_ssisoperator
db_ssisltduser
Os membros dessas funções de banco de dados podem administrar e usar o SSIS. As instâncias do SQL Server que são atualizadas de uma versão anterior podem conter uma versão mais antiga da função que foi nomeada com o DTS (Data Transformation Services), e não com o SSIS. Para saber mais confira Funções do Serviço SSIS (Integration Services).
dc_admin
dc_operator
dc_proxy
Os membros dessas funções de banco de dados podem administrar e usar o coletor de dados. Para obter mais informações, consulte Coleção de dados.
PolicyAdministratorRole Os membros da função de banco de dados db_ PolicyAdministratorRole podem executar todas as atividades de configuração e manutenção nas políticas condições do Gerenciamento Baseado em Políticas. Para obter mais informações, veja Administrar servidores usando o gerenciamento baseado em políticas.
ServerGroupAdministratorRole
ServerGroupReaderRole
Os membros dessas funções de banco de dados podem administrar e usar grupos de servidores registrados.
dbm_monitor Criada no banco de dados msdbquando o primeiro banco de dados é registrado no Monitor de Espelhamento de Banco de Dados. A função dbm_monitor não tem nenhum membro até que um administrador do sistema atribua usuários à função.

Os membros que têm a função db_ssisadmin e a função dc_admin podem elevar seus privilégios para sysadmin. Essa elevação de privilégios pode ocorrer porque essas funções podem modificar os pacotes do Integration Services e os pacotes do Integration Services podem ser executados pelo SQL Server usando o contexto de segurança sysadmin do SQL Server Agent. Para se proteger contra essa elevação de privilégios ao executar planos de manutenção, conjuntos de coleções de dados e outros pacotes de serviços de integração, configure os trabalhos do SQL Server Agent que executam pacotes para usar uma conta proxy com privilégios limitados ou apenas adicione membros sysadmin às funções db_ssisadmin e dc_admin.

Trabalhar com funções de nível de banco de dados

A tabela a seguir explica os comandos, exibições e funções para trabalhar com funções de nível de banco de dados.

Recurso Tipo Descrição
sp_helpdbfixedrole Metadados Retorna uma lista das funções de banco de dados fixas.
sp_dbfixedrolepermission Metadados Exibe as permissões de uma função de banco de dados fixa.
sp_helprole Metadados Retorna informações sobre as funções no banco de dados atual.
sp_helprolemember Metadados Retorna informações sobre os membros de uma função no banco de dados atual.
sys.database_role_members Metadados Retorna uma linha para cada membro de cada função de banco de dados.
IS_MEMBER Metadados Indica se o usuário atual é um membro do grupo Microsoft Windows especificado, grupo Microsoft Entra ou da função de banco de dados do Microsoft SQL Server.
CREATE ROLE Comando Cria uma nova função de banco de dados no banco de dados atual.
ALTER_ROLE Comando Altera o nome ou a associação de uma função de banco de dados.
DROP ROLE Comando Remove uma função do banco de dados.
sp_addrole Comando Cria uma nova função de banco de dados no banco de dados atual.
sp_droprole Comando Remove uma função de banco de dados do banco de dados atual.
sp_addrolemember Comando Adiciona um usuário de banco de dados, uma função de banco de dados, o logon do Windows ou um grupo do Windows em uma função de banco de dados no banco de dados atual. Todas as plataformas, exceto Analytics Platform System (PDW) e o Azure Synapse, devem usar ALTER ROLE.
sp_droprolemember Comando Remove uma conta de segurança de uma função do SQL Server no banco de dados atual. Todas as plataformas, exceto Analytics Platform System (PDW) e o Azure Synapse, devem usar ALTER ROLE.
GRANT Permissões Adiciona a permissão a uma função.
DENY Permissões Nega uma permissão a uma função.
REVOKE Permissões Remove as permissões concedidas ou negadas anteriormente.

Função de banco de dados pública

Cada usuário do banco de dados pertence à função de banco de dados pública . Quando permissões específicas não são concedidas ou são negadas a um usuário em um objeto seguro, o usuário herda as permissões concedidas como públicas naquele objeto. Os usuários do banco de dados não podem ser removidos da função public.

Exemplos

Os exemplos nesta seção mostram como trabalhar com funções de nível de banco de dados.

R. Adicionar um usuário a uma função de nível de banco de dados

O exemplo a seguir adiciona o usuário 'Ben' à função fixa de nível de banco de dados db_datareader.

ALTER ROLE db_datareader ADD MEMBER Ben;
GO

B. Listar todas as entidades de segurança de banco de dados que são membros da função de nível de banco de dados

A instrução a seguir retorna todos os membros de qualquer função de banco de dados.

SELECT roles.principal_id AS RolePrincipalID,
    roles.name AS RolePrincipalName,
    database_role_members.member_principal_id AS MemberPrincipalID,
    members.name AS MemberPrincipalName
FROM sys.database_role_members AS database_role_members
INNER JOIN sys.database_principals AS roles
    ON database_role_members.role_principal_id = roles.principal_id
INNER JOIN sys.database_principals AS members
    ON database_role_members.member_principal_id = members.principal_id;
GO