Partilhar via


Segurança ao nível da coluna

Column-Level segurança permite que os clientes controlem o acesso a colunas de tabela com base no contexto de execução do utilizador ou na associação a grupos.

A segurança ao nível da coluna simplifica a conceção e a codificação de segurança na sua aplicação, permitindo-lhe restringir o acesso às colunas para proteger dados confidenciais. Por exemplo, garantir que utilizadores específicos só podem aceder a determinadas colunas de uma tabela pertinentes para o respetivo departamento. A lógica de restrição de acesso está localizada na camada da base de dados e não longe dos dados noutra camada de aplicação. A base de dados aplica as restrições de acesso sempre que o acesso a dados é tentado a partir de qualquer camada. Esta restrição torna a sua segurança mais fiável e robusta ao reduzir a área de superfície do seu sistema de segurança geral. Além disso, a segurança ao nível da coluna também elimina a necessidade de introduzir vistas para filtrar colunas para impor restrições de acesso aos utilizadores.

Pode implementar a segurança ao nível da coluna com a sintaxe GRANT Object Permissions T-SQL. Com este mecanismo, a autenticação SQL e o ID de Microsoft Entra (anteriormente autenticação do Azure Active Directory) são suportados.

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

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

Syntax

A sintaxe da GRANT instrução para permissões de objetos permite conceder permissões a 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 seguinte mostra como restringir TestUser o acesso à SSN coluna da Membership tabela:

Crie Membership uma tabela com SSN coluna utilizada 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);

Permitir TestUser o acesso a 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 falha 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 utilização

Alguns exemplos de como a segurança ao nível da coluna está a ser utilizada atualmente:

  • Uma empresa de serviços financeiros permite que apenas os gestores de conta tenham acesso a números de segurança social (SSN), 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 confidenciais, impedindo ao mesmo tempo que os membros do departamento de faturação vejam estes dados.

Passos seguintes