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.
Demonstre as habilidades necessárias para implementar controles de segurança, manter a postura de segurança de uma organização e identificar e corrigir vulnerabilidades de segurança.
Saiba como criar tabelas usando o SQL do Synapse no Azure Synapse Analytics e conheça as principais diferenças entre o pool de SQL dedicado e o pool de SQL sem servidor.
Saiba como implementar uma estratégia de carregamento de dados do PolyBase para pool de SQL dedicado usando extração, carregamento e transformação (ELT).