Начало » Использование СУБД » Microsoft SQL Server » Выборка ролей с их свойствами из инстанса (Окажите помощь в доработке скрипта) 
	
		
		
			| Выборка ролей с их свойствами из инстанса [сообщение #5632] | 
			Tue, 29 October 2024 11:48   | 
		 
		
			
				
				
				
					
						  
						keepermode
						 Сообщений: 37 Зарегистрирован: May 2023 
						
					 | 
					Member  | 
					 | 
		 
		 
	 | 
 
	
		Как сделать выборку из инстанса (описание ролей в базах): 
Список баз, роль в базе, информация из свойств роли (см.скрин) - Schema, Name, Type - и по каждой строчке выбранные Permitions (например Select - Grant и т.д.) 
Grantor, Grant, With Grant, Deny 
 
 
1. Первые три колонки работают по скрипту: 
EXEC sp_msforeachdb 'USE [?]; 
--Исключаем системные базы 
IF DB_NAME() NOT IN (''master'', ''model'', ''msdb'', ''tempdb'')  
    	SELECT DB_NAME() AS [DB_NAME],  RP.name AS [Role_NAME],  UP.default_schema_name AS [User_Schema] --, --sys.schemas 
    FROM sys.database_role_members AS R 
    INNER JOIN sys.database_principals AS UP 
        ON UP.principal_id = R.member_principal_id 
    INNER JOIN sys.database_principals AS RP 
        ON RP.principal_id = R.role_principal_id 
    ORDER BY RP.name, UP.name 
' 
GO 
 
 
2. --Выборка table_name, table_type, TABLE_SCHEMA работает: 
SELECT table_name, table_type, TABLE_SCHEMA 
                 FROM information_schema.table 
 
3. --Выборку уникальных Permision вот нашёл: 
select DISTINCT permission_name from sys.database_permissions 
 
-- alter,  control, Permission, Delete,  Insert, References, Select, Update, Take owneship, Vew change tracking, Vew definition 
--------------------- 
 
  
Как это слепить/объединить, чтобы показало всё вместе? Сопоставить Базы Роли Схемы Таблицы ТипыТаблиц Permissions
		
		
		[Обновления: Tue, 29 October 2024 16:38] Известить модератора  
 |  
	| 
		
	 | 
 
 
 |  
	| 
		
 |  
	| 
		
 |  
	
		
		
			| Re: Выборка ролей с их свойствами из инстанса [сообщение #5648 является ответом на сообщение #5637] | 
			Thu, 31 October 2024 11:28    | 
		 
		
			
				
				
				
					
						  
						BlackEric
						 Сообщений: 393 Зарегистрирован: June 2022 
						
					 | 
					Senior Member  | 
					 | 
		 
		 
	 | 
 
	
		
Declare @T Table ([DB_NAME] nvarchar(128), [Role_NAME] nvarchar(128), [User_Schema] nvarchar(128))
Insert @T
EXEC sp_msforeachdb 'USE [?];
--Исключаем системные базы
IF DB_NAME() NOT IN (''master'', ''model'', ''msdb'', ''tempdb'')
    SELECT DB_NAME() AS [DB_NAME],  RP.name AS [Role_NAME],  UP.default_schema_name AS [User_Schema] --, --sys.schemas
   FROM sys.database_role_members AS R
   INNER JOIN sys.database_principals AS UP
       ON UP.principal_id = R.member_principal_id
   INNER JOIN sys.database_principals AS RP
       ON RP.principal_id = R.role_principal_id
   ORDER BY RP.name, UP.name
'
Select * from @T t
left join 
 information_schema.TABLES ist
on t.User_Schema = ist.TABLE_SCHEMA
GO
 
		
		
		
 |  
	| 
		
	 | 
 
 
 |  
	
		
		
			| Re: Выборка ролей с их свойствами из инстанса [сообщение #5651 является ответом на сообщение #5648] | 
			Thu, 31 October 2024 14:12    | 
		 
		
			
				
				
				
					
						  
						keepermode
						 Сообщений: 37 Зарегистрирован: May 2023 
						
					 | 
					Member  | 
					 | 
		 
		 
	 | 
 
	
		Огромное спасибо! 
Можно теперь сюда как то привязать Permissions? 
 
select permission_name, T.name AS Table_name, state_desc, type_desc, U.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  
-- Уникальные Permissions(разрешения): 
select DISTINCT permission_name from sys.database_permissions  
--Список рermission (разрешений) инстанса, имеющих права доступа к определённой таблице					 
select permission_name, T.name AS Table_name, state_desc, type_desc, U.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  
		
		
		[Обновления: Thu, 31 October 2024 14:46] Известить модератора  
 |  
	| 
		
	 | 
 
 
 |  
	| 
		
 |  
	| 
		
 |  
	
		
		
			| Re: Выборка ролей с их свойствами из инстанса [сообщение #5682 является ответом на сообщение #5662] | 
			Sat, 02 November 2024 16:35    | 
		 
		
			
				
				
				
					
						  
						BlackEric
						 Сообщений: 393 Зарегистрирован: June 2022 
						
					 | 
					Senior Member  | 
					 | 
		 
		 
	 | 
 
	
		
Declare @Tt Table ([DB_NAME] nvarchar(128), [Role_NAME] nvarchar(128), [User_Schema] nvarchar(128), [User_Schema_Id] int)
Insert @Tt
EXEC sp_msforeachdb 'USE [?];
--Исключаем системные базы
IF DB_NAME() NOT IN (''master'', ''model'', ''msdb'', ''tempdb'')
    SELECT DB_NAME() AS [DB_NAME],  UP.name AS [Role_NAME],  UP.default_schema_name AS [User_Schema], sc.schema_id
   FROM sys.database_role_members AS R
	INNER JOIN sys.database_principals AS UP
       ON UP.principal_id = R.member_principal_id
	Left JOIN sys.schemas sc
		on UP.default_schema_name = sc.[name]
   ORDER BY UP.name
'
Select tt.DB_NAME, tt.Role_NAME, tt.User_Schema, tt.User_Schema_Id, P.permission_name, T.name AS Table_name, P.state_desc, T.type_desc, U.name,  P.major_id  from @Tt tt
left join sys.TABLES st
	on tt.User_Schema_Id = st.schema_id
join sys.database_permissions P
	on p.major_id = st.object_id
join  sys.tables T 
	ON P.major_id = T.object_id 
join  sysusers U 
	ON U.uid = P.grantee_principal_id
GO
 
Возможно так, но я не проверял детально. Мог где-то что-то не поджойнить.
		
		
		
 |  
	| 
		
	 | 
 
 
 |  
	| 
		
 |   
Переход к форуму:
 
 Текущее время: Tue Nov 04 03:59:23 GMT+3 2025 
 Общее время, затраченное на создание страницы: 0.01099 секунд 
 |