Важно понимать разницу между SQL Server login
(объект уровня экземпляра) и базой данных user
(объект уровня базы данных). В вашей строке подключения имя пользователя называется UserA
, что может ввести в заблуждение. «Логины» не имеют разрешений в базе данных. Ну, а не напрямую. Это «пользователь», что логин сопоставляется с тем, что имеет разрешения. Хорошо, достаточно того, что ...
SQL Войти
Если ваше членство роли login
имеет sysadmin
, вы будете иметь свободу делать что-либо, в том числе отправка почты через sp_send_dbmail
. Этот запрос будет сообщать вам, если Войти вы подключены, как есть, что членство (искать возвращаемого значения «1»):
SELECT IS_SRVROLEMEMBER('sysadmin', SUSER_NAME())
базы данных пользователя - Роль Членство
Однако, я подозреваю, вы хотите узнать, есть ли у вашего login
user
в msdb
, и если да, то У этого пользователя есть разрешение на отправку почты через 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_owner
или DatabaseMailUser
, он должен сможет выполнить sp_send_dbmail
. (Если есть явное DENY EXECUTE ON sp_send_dbmail TO [yourDBuser]
, то пользователь не будет иметь эту привилегию.)
Если пользователь dbo
, то он владеет msdb
(не вероятно - системные базы данных, как правило, принадлежит sa
логина), а также владелец базы данных, он может выполнять практически любую деятельность на db.
База данных пользователей - Индивидуальные гранты
Наконец, есть еще одна возможность, я могу думать: пользователь базы данных в MSDB не может быть в любой роли базы данных, но может явно была дана привилегия выполнить sp_send_dbmail
следующим образом:
GRANT EXECUTE ON sp_send_dbmail TO [yourDBuser]
Это покажет вам, что разрешения были явно разрешены или запрещены для пользователя базы данных:
USE msdb
GO
SELECT * FROM fn_my_permissions(NULL, 'DATABASE');
GO
Чтобы уточнить, вы хотите узнать, разрешено ли 'UserA' выполнять' sp_send_dbmail'. Это вопрос? – DMason
@ DMason, это правильно. – usefulBee