我需要检查用户是否具有角色DatabaseMailUserRole
。
我试过了:
SELECT IS_MEMBER('DatabaseMailUserRole')
SELECT IS_ROLEMEMBER ('DatabaseMailUserRole', '<loginname>')
两者都返回correct
或incorrect
的值。
这意味着对于多次登录,它会返回正确的值,但对于其他人则不会。
答案 0 :(得分:0)
DatabaseMailUserRole是sql server,据我所知。您的逻辑问题是DatabaseMailUserRole是数据库角色,因此映射到用户,而不是登录。
用户(数据库级别)和登录(服务器级别)是不同的对象要访问服务器上的数据库,用户需要登录名和用户名。同一个人的登录和用户对象可以(但不是必须)共享相同的名称
例如
CREATE USER someuser FROM LOGIN 'domain\login';
GO
EXEC sp_addrolemember 'DatabaseMailUserRole','someuser';
GO
/* the following will fail because only users can be added to database role DatabaseMailUserRole */
EXEC sp_addrolemember 'DatabaseMailUserRole','domain\login';
GO
EXECUTE AS login = 'domain\login'
SELECT IS_MEMBER('DatabaseMailUserRole') -> true
/* login 'domain\login' has username someuser */
SELECT CURRENT_USER -> 'someuser'
SELECT SYSTEM_USER -> 'domain\login'
SELECT IS_ROLEMEMBER ('DatabaseMailUserRole', 'domain\login') -> NULL
SELECT IS_ROLEMEMBER ('DatabaseMailUserRole', 'someuser') -> True
因此 IS_ROLEMEMBER应该被调用w / arguments,如下所示:
SELECT IS_ROLEMEMBER ('DatabaseMailUserRole', '<user_name>')
/* where user name is one of the following */
SELECT name FROM sys.database_principals WHERE type=N'U';
/* OR */
SELECT USER_NAME()
/* OR */
SELECT CURRENT_USER
在某些情况下,使用登录名可能会获得正确的结果,因为服务器级登录可以映射到具有相同名称的数据库级用户。