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
.
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.