Implementar segurança em nível de coluna

Concluído

A segurança em nível de coluna (CLS) permite restringir o acesso à coluna para proteger dados confidenciais. Ele fornece controle granular sobre quem pode acessar partes específicas de dados, aumentando a segurança geral do seu data warehouse.

Proteja dados confidenciais

Vamos considerar um exemplo prático de segurança em nível de coluna (CLS) no setor de saúde. Suponha que temos uma tabela nomeada Patients com as seguintes colunas: PatientID, Name, Address, DateOfBirth, e MedicalHistory.

A MedicalHistory coluna contém informações confidenciais sobre a saúde dos pacientes. De acordo com os regulamentos de saúde e leis de privacidade, essas informações só devem ser acessíveis a pessoal médico autorizado, como médicos ou enfermeiros.

Veja como você pode implementar a segurança em nível de coluna nesse cenário:

  1. Identificar as colunas confidenciais: nesse caso, a coluna é identificada MedicalHistory como contendo dados confidenciais.

  2. Definir funções de acesso: defina funções como Doctor e Nurse quem tem permissão para acessar a MedicalHistory coluna. Outras funções, como Receptionist ou Patient podem ser impedidas de acessar esta coluna.

  3. Atribuir funções aos usuários: atribua as funções apropriadas a cada usuário no depósito. Por exemplo, o usuário DrSmith pode ser atribuído a função, enquanto o Doctor usuário JohnDoe pode ser atribuído a Patient função.

  4. Implementar controle de acesso: restrinja o MedicalHistory acesso à coluna com base na função do usuário.

A segurança em nível de coluna pode ajudar a garantir que as informações confidenciais de saúde só sejam acessíveis àqueles que estão autorizados a vê-las, protegendo a privacidade do paciente e cumprindo as regulamentações de saúde.

Configurar segurança a nível da coluna

No cenário que exploramos recentemente, a sintaxe a ser usada para implementar a segurança em nível de coluna pode ter a seguinte aparência:

-- Create roles
CREATE ROLE Doctor AUTHORIZATION dbo;
CREATE ROLE Nurse AUTHORIZATION dbo;
CREATE ROLE Receptionist AUTHORIZATION dbo;
CREATE ROLE Patient AUTHORIZATION dbo;
GO

-- Grant SELECT on all columns to all roles
GRANT SELECT ON dbo.Patients TO Doctor;
GRANT SELECT ON dbo.Patients TO Nurse;
GRANT SELECT ON dbo.Patients TO Receptionist;
GRANT SELECT ON dbo.Patients TO Patient;
GO

-- Deny SELECT on the MedicalHistory column to the Receptionist and Patient roles
DENY SELECT ON dbo.Patients (MedicalHistory) TO Receptionist;
DENY SELECT ON dbo.Patients (MedicalHistory) TO Patient;
GO

Neste exemplo, primeiro criamos as funções Doctor, Nurse, Receptionist, e Patient. Em seguida, concedemos SELECT permissões em todas as colunas da Patients tabela a todas as funções. Finalmente, negamos SELECT permissões na MedicalHistory coluna para as Receptionist funções e Patient . Isso garante que apenas os usuários com a Doctor função ou Nurse possam acessar a MedicalHistory coluna.

Entenda os benefícios

No domínio da segurança de armazém, duas técnicas comumente usadas são a segurança em nível de coluna e as exibições. Ambos os métodos servem para restringir o acesso a dados sensíveis, mas fazem-no de formas diferentes e oferecem vantagens diferentes. A tabela a seguir fornece uma análise comparativa dessas duas técnicas em vários aspetos, como granularidade do controle de acesso, manutenção, desempenho, transparência e flexibilidade.

Esta comparação pode ajudá-lo a entender os pontos fortes e fracos de cada método e guiá-lo na escolha da abordagem mais adequada para seus requisitos específicos de aplicação.

Aspeto Segurança em nível de coluna Visualizações
Granularidade do controle de acesso Permite o controlo a um nível mais granular. Pode especificar diferentes direitos de acesso para diferentes usuários ou funções em colunas diferentes dentro da mesma tabela. Precisaria criar diferentes modos de exibição para diferentes conjuntos de permissões.
Manutenção As permissões são vinculadas às próprias colunas, para que elas se adaptem automaticamente às alterações na estrutura da tabela. Se a estrutura da tabela subjacente mudar, as exibições podem precisar ser atualizadas para refletir essas alterações.
Desempenho Geralmente mais eficiente porque opera diretamente nos dados da tabela. Pode introduzir despesas gerais de desempenho, especialmente se forem complexas ou se as tabelas subjacentes forem grandes.
Transparência As restrições são transparentes para o utilizador. O usuário consulta a tabela como de costume, e o mecanismo de banco de dados se encarrega de aplicar as regras de segurança. O usuário precisa consultar um objeto diferente (a exibição em vez da tabela).
Flexibilidade Menos flexível do que as vistas. Muito flexível e pode fornecer segurança em nível de linha (incluindo uma WHERE cláusula na definição de exibição), além de segurança em nível de coluna. Eles também podem transformar os dados (por exemplo, calculando colunas derivadas), o que não é possível com segurança em nível de coluna.

A escolha entre usar segurança em nível de coluna ou exibições dependerá dos requisitos específicos do seu aplicativo. Certifique-se sempre de testar quaisquer alterações de segurança em um ambiente seguro antes de aplicá-las em um armazém de produção.