DatabaseMailUserRoleは、私が知っているものからSQL Serverです。あなたのロジックの問題は、DatabaseMailUserRoleがデータベースロールであるため、ユーザーにマップされ、ではなくログインになります。
ユーザー(データベースレベル)とログイン(サーバーレベル)は異なるオブジェクトサーバー上のデータベースにアクセスするには、ユーザーはログイン名とユーザー名の両方が必要です。ログインとユーザーオブジェクト同じ人のためかもしれないが、そのため IS_ROLEMEMBERは、以下のように引数/ wを呼び出さなければならない、例えば
同じ名前を共有する
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
を必要とされていません。
サーバーレベルのログインを同じ名前のデータベースレベルのユーザーにマップできるため、ログイン名を使用して正しい結果が得られる場合があります。
これはどのRDBMSですか? 'mysql'、' postgresql'、 'sql-server'、' oracle'、 'db2'のどれかを指定するタグを追加してください。 –
私の知る限り、DatabaseMailUserRoleはSQLサーバです。もしそうなら、sql-serverでタグ付けしてください。 –