tags:

views:

38

answers:

2

SQL Server 2008 :

How do I find out what kind of roles have what kind of permissions on a given table.

Thank you in advance.

A: 

You can get all permissions granted in the database and filter out for your table:

select permission_name, state, pr.name
from sys.database_permissions pe
join sys.database_principals pr on pe.grantee_principal_id = pr.principal_id
where pe.class = 1 
    and pe.major_id = object_id('<table_name>')
    and pe.minor_id = 0;

In addition you need to add the built in role permissions (db_owner, db_datareader, db_datawriter etc). Objects may also be accessed through ownership chaining.

You can always find out your own effective permission on any object by using fn_my_permissions('table_name', 'OBJECT')

Remus Rusanu
This script did not work for me...
dotnet-practitioner
I get a blank row for my table..
dotnet-practitioner
the query works fine. A 'blank row' (an empty result set) is a valid response. Is actually the expected result for a table on which no explicit grants were issued.
Remus Rusanu
So... if I get a blank row... how do I know ... who has what permissions on this table? Thanks..
dotnet-practitioner
There are implicit permissions, the ones derived from the fixed roles: db_owner members have all permissions, db_datareader members can select from it, db_datawriter member can update it etc etc. And all other permissions that are derived from ownership chaining. Read the link in the post.
Remus Rusanu
Try granting an explicit right, like `GRANT SELECT ON <table> TO guest` and then run again the query to see the non-implicit permission grant.
Remus Rusanu