Níveis de permissão do grupo do SQL 2005 AD

1

Estou tentando conceder permissões a um aplicativo de banco de dados (sql 2005) com base em grupos do AD. A idéia geral é exigir que um usuário tenha uma associação com "app_users" para visualizar qualquer coisa, e a associação a outros grupos fornece acesso de gravação a esse grupo. "app_customers" dá acesso de gravação ao módulo de clientes, "app_sales" às vendas, etc.

Eu listei um exemplo abaixo:

user1: membro do AD de app_users
user2: membro do AD de app_users, app_customers

Para a tabela dbo.customers:
app_users
- Concedido: Selecionar permissão
- Negado: Inserir, Atualizar, Excluir

app_customers
- Concedido: Selecionar permissão
- Concedido: Inserir, atualizar, excluir

Eu esperaria que user1 fosse capaz de visualizar a tabela dbo.customers, mas não teria permissão para modificar nada (insert / update / delete) - o que funciona. Na mesma linha, eu esperaria que o user2 pudesse visualizar e modificar a tabela dbo.customers, já que eles são membros do app_customers.

No entanto, este não é o caso. Em vez disso, user2 é negado qualquer modificação apenas como user1. Eu pareço lembrar de algo sobre negar permissões ganhando se houve um conflito, mas honestamente tem sido muito tempo desde que eu lidei com eles.


Eu estou indo sobre isso do jeito certo?

    
por jj. 01.12.2011 / 01:27

1 resposta

1

Negar sempre substituirá a concessão. Você precisa revogar o direito DENY para app_users. Se o usuário não tiver direitos, você não precisará DENY de direitos, a menos que nunca queira que eles tenham direitos sobre a tabela.

select sys.schemas.name 'Schema', sys.objects.name Object, sys.database_principals.name username, sys.database_permissions.type permissions_type,
    sys.database_permissions.permission_name,
    sys.database_permissions.state permission_state,
    sys.database_permissions.state_desc,
    state_desc + ' ' + permission_name + ' on ['+ sys.schemas.name + '].[' + sys.objects.name + '] to [' + sys.database_principals.name + ']' COLLATE LATIN1_General_CI_AS
from sys.database_permissions
join sys.objects on sys.database_permissions.major_id =
    sys.objects.object_id
join sys.schemas on sys.objects.schema_id = sys.schemas.schema_id
join sys.database_principals on sys.database_permissions.grantee_principal_id =
    sys.database_principals.principal_id
order by 1, 2, 3, 5
    
por 01.12.2011 / 01:41