Tôi đang tìm một kịch bản lệnh t-sql có thể liệt kê các cơ sở dữ liệu và các vai trò/đặc quyền được ánh xạ cho một người dùng cụ thể. Sử dụng SQL Server 2008 R2.T-SQL liệt kê tất cả ánh xạ người dùng với vai trò/quyền cơ sở dữ liệu cho một Đăng nhập
Trả lời
sử dụng fn_my_permissions
EXECUTE AS USER = 'userName';
SELECT * FROM fn_my_permissions(NULL, 'DATABASE')
Đây có phải là loại điều bạn muốn? Bạn có thể muốn mở rộng nó để có thêm thông tin về các bảng sys.
use master DECLARE @name VARCHAR(50) -- database name DECLARE db_cursor CURSOR FOR select name from sys.databases OPEN db_cursor FETCH NEXT FROM db_cursor INTO @name WHILE @@FETCH_STATUS = 0 BEGIN print @name exec('USE ' + @name + '; select rp.name, mp.name from sys.database_role_members drm join sys.database_principals rp on (drm.role_principal_id = rp.principal_id) join sys.database_principals mp on (drm.member_principal_id = mp.principal_id)') FETCH NEXT FROM db_cursor INTO @name END CLOSE db_cursor DEALLOCATE db_cursor
Cảm ơn @JDC. Tôi sợ điều đó không giúp tôi. Để được chính xác những gì tôi đang tìm là điều tương tự được gọi là 'vai trò máy chủ' và 'lập bản đồ người dùng' dưới thuộc tính đăng nhập cho một đăng nhập cụ thể. Tôi cần phải có các vai trò máy chủ liên quan và chi tiết lập bản đồ người dùng cho một thông tin đăng nhập cụ thể được liệt kê. – muddu83
CREATE TABLE #tempww (
LoginName nvarchar(max),
DBname nvarchar(max),
Username nvarchar(max),
AliasName nvarchar(max)
)
INSERT INTO #tempww
EXEC master..sp_msloginmappings
-- display results
SELECT *
FROM #tempww
ORDER BY dbname, username
-- cleanup
DROP TABLE #tempww
Bạn có sắp xếp thứ này không? Tôi chỉ tìm thấy mã này ở đây:
Tôi nghĩ rằng tôi sẽ cần phải làm một chút tinh chỉnh, nhưng về cơ bản này đã được sắp xếp nó cho tôi!
Tôi hy vọng điều đó cũng phù hợp với bạn!
J
Stole này từ here. Tôi tìm thấy nó rất hữu ích!
DECLARE @DB_USers TABLE
(DBName sysname, UserName sysname, LoginType sysname, AssociatedRole varchar(max),create_date datetime,modify_date datetime)
INSERT @DB_USers
EXEC sp_MSforeachdb
'
use [?]
SELECT ''?'' AS DB_Name,
case prin.name when ''dbo'' then prin.name + '' (''+ (select SUSER_SNAME(owner_sid) from master.sys.databases where name =''?'') + '')'' else prin.name end AS UserName,
prin.type_desc AS LoginType,
isnull(USER_NAME(mem.role_principal_id),'''') AS AssociatedRole ,create_date,modify_date
FROM sys.database_principals prin
LEFT OUTER JOIN sys.database_role_members mem ON prin.principal_id=mem.member_principal_id
WHERE prin.sid IS NOT NULL and prin.sid NOT IN (0x00) and
prin.is_fixed_role <> 1 AND prin.name NOT LIKE ''##%'''
SELECT
dbname,username ,logintype ,create_date ,modify_date ,
STUFF(
(
SELECT ',' + CONVERT(VARCHAR(500),associatedrole)
FROM @DB_USers user2
WHERE
user1.DBName=user2.DBName AND user1.UserName=user2.UserName
FOR XML PATH('')
)
,1,1,'') AS Permissions_user
FROM @DB_USers user1
GROUP BY
dbname,username ,logintype ,create_date ,modify_date
ORDER BY DBName,username
Tôi đã viết một truy vấn nhỏ để tìm sự cho phép của người dùng trên cơ sở dữ liệu cụ thể.
SELECT * FROM
(
SELECT
perm.permission_name AS 'PERMISSION'
,perm.state_desc AS 'RIGHT'
,perm.class_desc AS 'RIGHT_ON'
,p.NAME AS 'GRANTEE'
,m.NAME AS 'USERNAME'
,s.name AS 'SCHEMA'
,o.name AS 'OBJECT'
,IIF(perm.class = 0, db_name(), NULL) AS 'DATABASE'
FROM
sys.database_permissions perm
INNER JOIN sys.database_principals p ON p.principal_id = perm.grantee_principal_id
LEFT JOIN sys.database_role_members rm ON rm.role_principal_id = p.principal_id
LEFT JOIN sys.database_principals m ON rm.member_principal_id = m.principal_id
LEFT JOIN sys.schemas s ON perm.class = 3 AND perm.major_id = s.schema_id
LEFT JOIN sys.objects AS o ON perm.class = 1 AND perm.major_id = o.object_id
UNION ALL
SELECT
perm.permission_name AS 'PERMISSION'
,perm.state_desc AS 'RIGHT'
,perm.class_desc AS 'RIGHT_ON'
,'SELF-GRANTED' AS 'GRANTEE'
,p.NAME AS 'USERNAME'
,s.name AS 'SCHEMA'
,o.name AS 'OBJECT'
,IIF(perm.class = 0, db_name(), NULL) AS 'DATABASE'
FROM
sys.database_permissions perm
INNER JOIN sys.database_principals p ON p.principal_id = perm.grantee_principal_id
LEFT JOIN sys.schemas s ON perm.class = 3 AND perm.major_id = s.schema_id
LEFT JOIN sys.objects AS o ON perm.class = 1 AND perm.major_id = o.object_id
) AS [union]
WHERE [union].USERNAME = 'Username' -- Username you will search for
ORDER BY [union].RIGHT_ON, [union].PERMISSION, [union].GRANTEE
Các điều khoản về vai trò cơ sở dữ liệu cố định không xuất hiện trong sys.database_permissions. Do đó, các hiệu trưởng cơ sở dữ liệu có thể có các quyền bổ sung không được liệt kê ở đây.
Tôi không thích
EXECUTE AS USER = 'userName';
SELECT * FROM fn_my_permissions(NULL, 'DATABASE')
Bởi vì nó chỉ lấy những quyền người dùng đã không phải là nơi họ đến từ!
Có lẽ tôi tìm hiểu làm thế nào để tham gia các vai trò cơ sở dữ liệu cho phép cố định cấp cho người sử dụng một ngày nào đó ...
Xin vui lòng thưởng thức cuộc sống và ghét những người sử dụng: D
CREATE TABLE #tempww (
LoginName nvarchar(max),
DBname nvarchar(max),
Username nvarchar(max),
AliasName nvarchar(max)
)
INSERT INTO #tempww
EXEC master..sp_msloginmappings
-- display results
declare @col varchar(1000)
declare @sql varchar(2000)
select @col = COALESCE(@col + ', ','') + QUOTENAME(DBname)
from #tempww Group by DBname
Set @sql='select * from (select LoginName,Username,AliasName,DBname,row_number() over(order by (select 0)) rn from #tempww) src
PIVOT (Max(rn) FOR DBname
IN ('[email protected]+')) pvt'
EXEC(@sql)
-- cleanup
DROP TABLE #tempww
Số dưới một số cột cơ sở dữ liệu là gì? Khá chắc chắn đó là cơ sở dữ liệu mà Tên đăng nhập có quyền truy cập nhưng có phải là số lần đăng nhập này đã đăng nhập không? – JustJohn
- 1. Liệt kê tất cả người dùng trong LDAP bằng PHP
- 2. Cho phép người dùng postgres chỉ liệt kê cơ sở dữ liệu của riêng mình
- 3. Mã EF Đầu tiên - tạo cơ sở dữ liệu - Đăng nhập thất bại cho người dùng
- 4. Cơ sở dữ liệu người dùng đơn và cơ sở dữ liệu nhiều người dùng
- 5. Liệt kê thông tin về tất cả các tệp cơ sở dữ liệu trong SQL Server
- 6. Làm thế nào để liệt kê tất cả các cơ sở dữ liệu MongoDB trong Node.js?
- 7. Liệt kê tất cả các bảng trong cơ sở dữ liệu
- 8. Có thể liệt kê tất cả các khoá ngoại trong cơ sở dữ liệu không?
- 9. Liệt kê người dùng và vai trò của họ trong SQL Server
- 10. Lấy danh sách tất cả người dùng cơ sở dữ liệu có vai trò được chỉ định
- 11. Một cơ sở dữ liệu người dùng phục vụ nhiều cơ sở dữ liệu ứng dụng
- 12. Trình đăng nhập cơ sở dữ liệu tốt cho Java?
- 13. Liệt kê tất cả các kho SVN
- 14. Cách xử lý người dùng và thông tin đăng nhập trong Dự án Cơ sở dữ liệu Visual Studio?
- 15. Cơ sở dữ liệu của tác nhân người dùng với ánh xạ thương hiệu trình duyệt có tồn tại không?
- 16. khôi phục lỗi đăng nhập cơ sở dữ liệu người dùng
- 17. Psql liệt kê tất cả các bảng
- 18. Cách xử lý cơ sở dữ liệu nhiều người dùng
- 19. Máy chủ SQL - Cách cấp quyền truy cập đọc cho TẤT CẢ cơ sở dữ liệu vào Đăng nhập?
- 20. Liệt kê tất cả các chỉ mục
- 21. PLSQL - Thả tất cả các đối tượng cơ sở dữ liệu của người dùng
- 22. Postgres tạo cơ sở dữ liệu người dùng
- 23. ASP.NET | Xác thực biểu mẫu | TẤT CẢ người dùng đã đăng nhập (danh sách tất cả người dùng hoặc số)
- 24. Tại sao tôi liệt kê các vai trò bảo mật trong web.xml khi chúng nằm trong cơ sở dữ liệu jdbcRealm?
- 25. Vai trò cơ sở dữ liệu SQL Server
- 26. Không thể mở cơ sở dữ liệu được yêu cầu bởi thông tin đăng nhập. Đăng nhập thất bại. Đăng nhập thất bại cho người dùng
- 27. Cơ sở dữ liệu SQLite cho ứng dụng Android với nhiều người dùng tiềm năng
- 28. Làm cách nào để quản lý Vai trò Người dùng trong Cơ sở dữ liệu?
- 29. Apache Shiro - sử dụng cơ sở dữ liệu để đọc người dùng, vai trò và quyền
- 30. Ẩn cơ sở dữ liệu cho thông tin đăng nhập trên Microsoft Sql Server 2008R2 trở lên
Cảm ơn bạn @Amon nhưng tôi nghĩ rằng tôi đã không làm cho bản thân mình rõ ràng. Đầu ra của tập lệnh sẽ cho tôi danh sách các dbs, người dùng ánh xạ tới các dbs và các thành viên vai trò cơ sở dữ liệu cho mỗi người trong số họ cho một thông tin đăng nhập cụ thể. – muddu83