2011-05-12 7 views
13

Usted pensaría que podría hacer una pregunta tan simple en Google. Pero no importa lo que intento, choco contra una pared de ladrillos.lista de usuarios y roles que tienen permisos para un objeto (tabla) en SQL

¿Cuál es la declaración de TSQL para encontrar una lista de roles que tienen permisos para una tabla?

El pseudo-código es el siguiente:

SELECT role_name 
FROM permissions 
where object_name = 'the_table_i_need_to_know_about' 
+0

¿Qué versión de SQL Server? – MartW

+0

Sql Azure. Sql Azure – Rabbi

Respuesta

23

Es un poco complicado. Primero, recuerde que los roles incorporados tienen acceso predefinido; estos no aparecerán en la consulta a continuación. La consulta propuesta enumera las funciones de la base de datos personalizadas y el acceso al que fueron específicamente otorgadas o denegadas. Esto es lo que estabas buscando?

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 
7

probar esto,

sp_helprotect "nombre de tabla" ir

+0

No se pudo encontrar el procedimiento almacenado 'sp_helprotect' – Rabbi

+0

http://msdn.microsoft.com/en-us/library/ms190310.aspx: no estoy seguro de que esté disponible en Azure. – Tony

+0

Esto funcionó para mí en SQL2008 R2. Gracias. – Damien

1

el fin de obtener los papeles individuales asignadas a un usuario particular con una base de datos, es necesario ejecutar el procedimiento sp_helpusers. El siguiente procedimiento se ejecutará sp_helpuser para cada base de datos en el servidor, se acumulan los resultados para cada base de datos en una variable de tabla, y luego proporcionar un conjunto de resultados de cada base de datos, el usuario y el papel que tienen permiso para:

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 

Cuestiones relacionadas