web-dev-qa-db-fra.com

liste des utilisateurs et des rôles qui ont des autorisations sur un objet (table) dans SQL

Vous penseriez que je serais en mesure de Google une question aussi simple. Mais peu importe ce que j'essaye, je frappe un mur de briques.

Qu'est-ce que l'instruction TSQL pour trouver une liste de rôles qui ont des autorisations sur une table?

Le pseudo-code ressemble à ceci:

SELECT role_name 
FROM permissions 
where object_name = 'the_table_i_need_to_know_about'
18
Rabbi

C'est un peu délicat. Tout d'abord, rappelez-vous que les rôles intégrés ont un accès prédéfini; ceux-ci n'apparaîtront pas dans la requête ci-dessous. La requête proposée répertorie les rôles de base de données personnalisés et les accès auxquels ils ont été spécifiquement accordés ou refusés. Est ce que c'est ce que vous recherchiez?

select permission_name, state_desc, type_desc, U.name, OBJECT_NAME(major_id) 
from sys.database_permissions P 
JOIN sys.tables T ON P.major_id = T.object_id 
JOIN sysusers U ON U.uid = P.grantee_principal_id
26
Herve Roggero

Essaye ça,

sp_helprotect "nom de table" go

7
sudmong

Pour obtenir les rôles individuels attribués à un utilisateur particulier dans une base de données, vous devez exécuter la procédure sp_helpusers. La procédure suivante exécutera sp_helpuser pour chaque base de données sur le serveur, accumulera les résultats pour chaque base de données dans une variable de table, puis fournira un jeu de résultats de chaque base de données, utilisateur et rôle auquel ils sont autorisés:

Create Procedure dba_HelpUserRoles
AS
Declare @SQL Varchar(2000)
Declare @DBname Sysname

Declare @HelpUserResults Table
(
UserName Sysname,
RoleName Sysname,
LoginName Sysname NULL,
DefDBName Sysname NULL,
DefSchemaName Sysname NULL,
UserID Smallint,
SID Smallint
)

Declare @DbUserResults Table
(
DBname Sysname,
UserName Sysname,
RoleName Sysname,
LoginName Sysname NULL,
DefDBName Sysname NULL,
DefSchemaName Sysname NULL,
UserID Smallint,
SID Smallint
)

Declare @DBcursor
Cursor For
Select Name
From sys.sysdatabases
Order by Name;

Fetch Next
From DBcursor
Into @DBname;

While @@Fetch_Status = 0
Begin

Set @SQL = 'Use [' + @DBname + ']; Exec sp_helpuser;';

Print @SQL

Insert @HelpUserResults
Exec(@SQL);

Insert @DBUserReults
Select @DBname, *
From @HelpUserResults
Where LoginName IS NOT NULL;

Delete
From HelpUserResults;

Fetch Next
From DBcursor
Into @DBname;

End

Close DBcursor;
Deallocate DBcursor;

Select *
From @DBUser_Results;

-------------------------------- Procedure End 

1
Steve Kirchner