如何检查MSDB的用户权限/角色



我有一个连接字符串

 <add name="DBCon" connectionString="Data Source=10.197.10.10,46512Games;Initial Catalog=Games;User Id=UserA;Password=;" providerName="SqlMembershipProvider" />

在使用sp_send_dbmail并通过sql查询之前,如何检查UserA在msdb数据库中是否具有任何权限或角色?

了解SQL Server login(实例级对象)和数据库user(数据库级对象)之间的区别非常重要。在连接字符串中,登录名为UserA,这可能会让人感到困惑。"登录名"在数据库中没有权限。嗯,不是直接。登录映射到的"用户"具有权限。好了,够了。。。

SQL登录

如果你的login拥有sysadmin角色成员资格,你可以自由支配任何事情,包括通过sp_send_dbmail发送邮件。此查询将告诉您连接的登录名是否具有该成员资格(查找返回值"1"):

SELECT IS_SRVROLEMEMBER('sysadmin', SUSER_NAME())

数据库用户-角色成员资格

但是,我怀疑您想知道您的loginmsdb中是否有user,如果有,是否有通过sp_send_dbmail发送邮件的权限。运行此查询以查看您的登录映射到msdb中的哪个用户(如果有的话)以及该用户所属的任何数据库角色:

SELECT l.name LoginName, u.name UserName, r.name RoleName
FROM master.sys.server_principals l
JOIN msdb.sys.database_principals u
    ON u.sid = l.sid
LEFT JOIN msdb.sys.database_role_members rm
    ON rm.member_principal_id = u.principal_id
LEFT JOIN msdb.sys.database_principals r
    ON r.principal_id = rm.role_principal_id
WHERE l.name = SUSER_NAME()
AND r.name IN ('db_owner', 'DatabaseMailUser')

如果用户是db_ownerDatabaseMailUser的成员,则应该能够执行sp_send_dbmail。(如果有明确的DENY EXECUTE ON sp_send_dbmail TO [yourDBuser],则用户将没有该权限。)

如果用户是dbo,那么它拥有msdb(不太可能——系统数据库通常由sa登录名拥有),并且作为数据库所有者,它可以在数据库上执行几乎任何活动。

数据库用户--个人授权

最后,我可以想到另一种可能性:msdb中的数据库用户可能没有任何数据库角色,但可以明确地被授予执行sp_send_dbmail的权限,如下所示:

GRANT EXECUTE ON sp_send_dbmail TO [yourDBuser]

这将显示哪些权限已明确授予或拒绝给数据库用户:

USE msdb
GO
SELECT * FROM fn_my_permissions(NULL, 'DATABASE');
GO

相关内容

  • 没有找到相关文章

最新更新