获取 sql 登录可以连接的所有数据库

mbu*_*urm 3 sql-server logins system-tables

我需要知道用户可以连接的 SQL Server 中的所有数据库。使用sys.databases我获得所有数据库并使用sys.server_principalssys.syslogins我获得所有服务器登录。但是我找不到包含这些表之间连接的表。有谁知道如何解决这个问题?谢谢。

Tom*_*m V 8

你应该能够做这样的事情:

EXECUTE AS login = 'loginname';

SELECT name
FROM sys.databases
WHERE HAS_DBACCESS(name) = 1;

REVERT;
Run Code Online (Sandbox Code Playgroud)

有关参考,请参阅EXECUTE ASHAS_DBACCESS


spa*_*dba 5

这应该让你朝着正确的方向前进:

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 是丑陋的、未记录的和不可靠的,但它只是向您展示信息如何存储在每个单独的数据库中。