Application Roles

Olá pessoal,

Como você gerencia as permissões em seu banco de dados?

Um aspecto muito pouco explorado nos bancos de dados são as permissões, visualizamos sempre fornecedores de sistemas, desenvolvedores, dentre outros, solicitando permissões “máximas” e que seriam utilizadas em último caso, são elas: SysAdmin e db_owner.

Muito longe de fazer o uso devido das permissões, estão a utilização de Roles que atualmente temos em três níveis:

  • Server Roles: Possuem fixed-roles, ou seja, aquelas que vêm por padrão como o sysadmin (sim é uma role e não um usuário), ao qual, tem um conjunto de permissões já definidas ou as flexible-roles que a partir do 2012, possibilitaram que os DBAs criassem novos grupos de permissões e então associassem seus usuários a elas, uma role bem prática é criar uma para DBA Juniors;
  • Database Roles: Possuem fixed-roles que também tem algumas já padrões, um exemplo clássico a role db_owner, mas também é possível desde o SQL Server 2008 criar novas roles e então associar permissões e usuários a elas;
  • Application Roles: Diferente das demais roles, esta seria útil para cenários onde somente uma determinada aplicação tem permissão para executar procedimentos ou comandos dentro do banco de dados, porém esta concessão deveria ser em tempo de execução. Para isto, utilizamos as Application Roles que são perfeitas para esse tipo de cenário.

Em meu novo vídeo, faço uma explanação sobre esses três tipos de papéis que são possíveis desde o SQL Server 2008, veja abaixo:

Abaixo você tem os scripts que utilizei durante a demonstração.

Obrigado,

Até a próxima pessoal!
Vithor da Silva e Silva | DBA SQL Server


[sourcecode language=”sql”]

USE [master]
GO
CREATE LOGIN [carlos.silva] WITH PASSWORD=N’Pa$$w0rd’, DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO

USE [AdventureWorks2012]
GO
CREATE USER [carlos.silva] FOR LOGIN [carlos.silva]
GO

— SERVER ROLES
USE [master]
GO
— Criação do papel chamado PowerUsers;
CREATE SERVER ROLE PowerUsers;
GO
— Concedendo permissão diretamente para um papel (role)
GRANT VIEW SERVER STATE TO PowerUsers;
GO
— Associando um usuário à um papel
ALTER SERVER ROLE [PowerUsers] ADD MEMBER [carlos.silva]
GO

— DATABASE ROLES
USE [AdventureWorks2012]
GO
— Criação de um papel chamado HR_Leitura, visando posteriormente associar permissões
CREATE ROLE HR_leitura;
GO
— Exemplo da concessão de permissão para a role
GRANT SELECT ON SCHEMA::HumanResources TO HR_Leitura;
GO

— APPLICATION ROLES
USE [AdventureWorks2012]
GO
CREATE APPLICATION ROLE HR_alterar WITH DEFAULT_SCHEMA = [HumanResources], PASSWORD = N’Pa$$w0rd123′
GO

GRANT UPDATE ON SCHEMA::HumanResources TO [HR_alterar];
GRANT SELECT ON SCHEMA::HumanResources TO [HR_alterar];
GO

—=========================================================
USE master
GO
— Adiciona Usuário a Server Role
ALTER SERVER ROLE [PowerUsers] ADD MEMBER [carlos.silva]
GO
USE [AdventureWorks2012]
GO
— Adiciona Usuário a Database Role
ALTER ROLE [HR_leitura] ADD MEMBER [carlos.silva]
GO

[/sourcecode]


[sourcecode language=”sql”]

USE AdventureWorks2012
GO

SELECT * FROM sys.dm_os_performance_counters;
GO
SELECT * FROM HumanResources.Department;
GO

UPDATE HumanResources.Department
SET Name = ‘Engenharia’ –Engineering
WHERE DepartmentID = 1;
GO

— Iniciando utilizacao da Role
DECLARE @cookie varbinary(8000);
EXEC sp_setapprole ‘HR_alterar’, ‘Pa$$w0rd123’, @fCreateCookie = true, @cookie = @cookie OUTPUT;
— ALTERACAO NECESSARIA
UPDATE HumanResources.Department
SET Name = ‘Engineering’ –Engineering
WHERE DepartmentID = 1;

— Desfazendo o uso da role
EXEC sp_unsetapprole @cookie;
GO

–unsetup da demo
REVERT;
USE master;
GO
ALTER SERVER ROLE [PowerUsers] DROP MEMBER [carlos.silva];
DROP SERVER ROLE [PowerUsers];
GO

USE [AdventureWorks2012]
GO
DROP USER [carlos.silva]
DROP ROLE [HR_leitura];
GO

USE [master]
GO
/****** Object: Login [carlos.silva] Script Date: 03/05/2016 21:23:01 ******/
DROP LOGIN [carlos.silva]
GO

[/sourcecode]


Leia mais em:

https://msdn.microsoft.com/en-us/library/ms190998.aspx

https://msdn.microsoft.com/en-us/library/ms181491.aspx

Deixe uma resposta