Compartilhar via


Segurança ao nível da coluna

Segurança de Nível de Coluna permite que os clientes controlem o acesso às colunas da tabela com base no contexto de execução do usuário ou associação de grupo.

A segurança em nível de coluna simplifica o design e a codificação da segurança em seu aplicativo, permitindo que você restrinja o acesso às colunas para proteger dados confidenciais. Por exemplo, garantir que usuários específicos possam acessar apenas certas colunas de uma tabela pertinente ao seu departamento. A lógica de restrição de acesso é localizado na camada de banco de dados, em vez de longe dos dados em outra camada de aplicativo. O banco de dados aplica as restrições de acesso sempre que houver uma tentativa de acessar dados em qualquer camada. Essa restrição torna a segurança mais robusta e confiável, reduzindo a área de superfície do sistema de segurança como um todo. Além disso, a segurança em nível de coluna também elimina a necessidade de introduzir modos de exibição para filtrar colunas para impor restrições de acesso em usuários.

Você deve implementar a segurança em nível de coluna com a sintaxe T-SQL GRANT Object Permissions. Com esse mecanismo, tanto a autenticação SQL quanto a autenticação do Microsoft Entra ID (anteriormente Azure Active Directory) são suportadas.

Considere também a capacidade de impor a Segurança em nível de linha em tabelas, com base em um filtro de cláusula WHERE.

O diagrama mostra uma tabela esquemático com a primeira coluna precedida por um cadeado fechado e suas células na cor laranja, enquanto as outras colunas são células brancas.

Syntax

A sintaxe da instrução GRANT para permissões de objeto permite conceder permissões a listas de colunas delimitadas por vírgulas em uma tabela.

GRANT <permission> [ ,...n ] ON
    [ OBJECT :: ][ schema_name ]. object_name [ ( column [ ,...n ] ) ]
    TO <database_principal> [ ,...n ]
    [ WITH GRANT OPTION ]
    [ AS <database_principal> ]
<permission> ::=
    SELECT
  | UPDATE
<database_principal> ::=
      Database_user
    | Database_role
    | Database_user_mapped_to_Windows_User
    | Database_user_mapped_to_Windows_Group

Exemplos

O exemplo a seguir mostra como restringir TestUser de acessar a coluna SSN da tabela Membership:

Crie uma tabela Membership com uma coluna SSN utilizada para armazenar números de previdência social:

CREATE TABLE Membership
  (MemberID int IDENTITY,
   FirstName varchar(100) NULL,
   SSN char(9) NOT NULL,
   LastName varchar(100) NOT NULL,
   Phone varchar(12) NULL,
   Email varchar(100) NULL);

Permitir que TestUser acesse todas as colunas exceto para a coluna SSN, que tem os dados confidenciais:

GRANT SELECT ON Membership(MemberID, FirstName, LastName, Phone, Email) TO TestUser;

As consultas executadas como TestUser falharão se incluírem a coluna SSN:

SELECT * FROM Membership;

Com o erro resultante:

Msg 230, Level 14, State 1, Line 12
The SELECT permission was denied on the column 'SSN' of the object 'Membership', database 'CLS_TestDW', schema 'dbo'.

Casos de uso

Alguns exemplos de como a segurança em nível de coluna está sendo usada atualmente:

  • Uma empresa de serviços financeiros permite que apenas gerentes de contas tenham acesso aos SSN (números do seguro social), números de telefone e outros dados pessoais.
  • Um provedor de saúde permite que apenas médicos e enfermeiros tenham acesso a registros médicos confidenciais, evitando que membros do departamento de cobrança vejam estes dados.

Próximas etapas