Partilhar via


Segurança a nível de coluna

Column-Level segurança permite que os clientes controlem o acesso às colunas da tabela com base no contexto de execução do usuário ou na associação ao 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 à coluna para proteger dados confidenciais. Por exemplo, garantir que usuários específicos possam acessar apenas determinadas colunas de uma tabela pertinente ao seu departamento. A lógica de restrição de acesso está localizada 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 o acesso aos dados é tentado a partir de qualquer camada. Esta restrição torna a sua segurança mais fiável e robusta, reduzindo a área de superfície do seu sistema de segurança geral. Além disso, a segurança em nível de coluna também elimina a necessidade de introduzir exibições para filtrar colunas para impor restrições de acesso aos usuários.

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

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

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

Sintaxe

A sintaxe da instrução de permissões de GRANT objeto permite conceder permissões para listas de colunas delimitadas por vírgulas numa 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 o acesso de TestUser à coluna SSN da tabela Membership.

Crie Membership uma tabela com SSN coluna usada para armazenar números de segurança 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);

Permita TestUser acessar todas as colunas, exceto a SSN coluna, que tem os dados confidenciais:

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

As consultas executadas como TestUser falham se incluírem a SSN coluna:

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 conta tenham acesso a números de segurança social (SSN) de clientes, números de telefone e outros dados pessoais.
  • Um prestador de cuidados de saúde permite que apenas médicos e enfermeiros tenham acesso a registos médicos sensíveis, ao mesmo tempo que impede que os membros do departamento de faturação visualizem estes dados.

Próximos passos