MS SQL Server:我的用户帐户在哪里?

MS SQL Server:我的用户帐户在哪里?

我可以使用我的 ID 和密码访问此服务器上的任何数据库。这是我的连接字符串:

数据源=my.database;初始目录=main_table;用户 ID=my_user_id;密码=my_password;

它可以工作,但现在我想拒绝 my_user_id 的访问。问题是 - 我在数据库中找不到该用户。

这怎么可能?它看起来像一个隐形帐户。它没有在任何地方列出,但是 SQL 授予该帐户权限。

我很困惑,我应该在哪里寻找这个帐户?

答案1

SELECT CASE 
        WHEN sysadmin = 1
            THEN 'You have system admin access'
        ELSE 'Normal user'
        END
FROM sys.syslogins
WHERE loginname LIKE '<loginname>'

上述查询将返回“您具有系统管理员权限”意味着提供的登录具有 sysadmin 权限,否则提供的登录不具有 sysadmin 权限。

答案2

解决方案:

服务器登录名必须与数据库用户关联才能在数据库中执行操作。两者都是校长在 SQL Server 中。在连接字符串中,用户 ID 的值是服务器登录名。您可以尝试检查当前数据库的此服务器登录的用户映射:

USE main_table               -- Server database

SELECT 
    sp.name AS LoginName,
    sp.type_desc AS LoginType,
    dp.name AS DatabaseUserName,
    r.name AS DatabaseRoleName
FROM sys.server_principals sp
LEFT JOIN sys.database_principals dp ON dp.sid = sp.sid
LEFT JOIN sys.database_role_members drm ON drm.member_principal_id = dp.principal_id
LEFT JOIN sys.database_principals r ON r.principal_id = drm.role_principal_id
WHERE sp.name = 'my_user_id' -- Server Login

笔记:

使用您当前的连接字符串,我认为您尝试使用 SQL 身份验证连接到 SQL Server。然后您的 SQL 登录名将映射到数据库用户(服务器登录名不等于数据库用户)。如果您想使用 Windows 身份验证进行连接,在大多数情况下,需要从连接字符串中删除用户 ID 和密码并包含 IntegratedSecurity=true。

相关内容