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.
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
- Permissões de Objeto GRANT (Transact-SQL)
- Segurança ao nível da linha
- Máscara de Dados Dinâmicos
- Encriptar uma Coluna de Dados
- Permissions (Database Engine) (Permissões (Motor de Base de Dados))