mbu*_*urm 3 sql-server logins system-tables
我需要知道用户可以连接的 SQL Server 中的所有数据库。使用sys.databases我获得所有数据库并使用sys.server_principals或sys.syslogins我获得所有服务器登录。但是我找不到包含这些表之间连接的表。有谁知道如何解决这个问题?谢谢。
你应该能够做这样的事情:
EXECUTE AS login = 'loginname';
SELECT name
FROM sys.databases
WHERE HAS_DBACCESS(name) = 1;
REVERT;
Run Code Online (Sandbox Code Playgroud)
有关参考,请参阅EXECUTE AS和HAS_DBACCESS
这应该让你朝着正确的方向前进:
DECLARE @results TABLE (
database_name sysname,
db_user_name sysname,
login_name sysname
);
INSERT @results
EXEC sp_MsForEachDB '
USE [?];
SELECT DB_NAME() AS database_name,
dp.name AS db_user_name,
sp.name AS login_name
FROM sys.database_principals dp
INNER JOIN sys.server_principals sp
ON sp.sid = dp.sid
';
SELECT *
FROM @results;
Run Code Online (Sandbox Code Playgroud)
PS sp_MsForEachDB 是丑陋的、未记录的和不可靠的,但它只是向您展示信息如何存储在每个单独的数据库中。