Eșecul executării msdb.dbo.sp_send_dbmail (Programare, Sql, Server Sql)

Nu există corp a intrebat.

Primesc această eroare:

Msg 229, Level 14, State 5, Procedure sp_send_dbmail, Line 1
Permisiunea EXECUTE a fost refuzată pentru obiectul „sp_send_dbmail”, baza de date „msdb”, schema „dbo”.

Partea relevantă a codului:

/****** Object:  StoredProcedure [dbo].[dbo.STATUSCHANGE_EMAILALERT] ******/

EXEC msdb.dbo.sp_send_dbmail
  @recipients = '[email protected]', -- Group Email
  @subject = 'Employee Status Update',
  @profile_name ='[email protected]', -- Setup the profile name group
  @body = @body,
  @body_format = 'HTML';

Comentarii

  • Eroarea vă indică faptul că nu aveți acces la sp_send_dbmail procedura stocată. Trebuie să vi se acorde permisiunea de a EXECUTE aceasta –  > Por Taryn.
  • Am găsit acest lucru: stackoverflow.com/questions/5569511/…  > Por No Body.
  • Cred că există un pic mai mult implică decât doar permisiunea singură, va posta aici odată ce știu mai multe. mulțumesc pentru comentariu albastru. Ați observat ceva în scriptul meu care ar putea fi îmbunătățit? –  > Por No Body.
5 răspunsuri
stambikk

Am găsit o soluție frumoasă și ușoară care a funcționat pentru mine aici:

Dacă aplicațiile dvs. SQL nu pot trimite e-mailuri folosind e-mailul bazei de date (presupun că aveți deja configurat contul și profilul DBMail), există două lucruri de setat:

  1. SQL MANAGEMENT STUDIO > MANAGEMENT > DATABASE MAIL > click dreapta șiselectați CONFIGURE… > selectați MANAGE PROFILE SECURITY > SQL MANAGEMENT > SQL MANAGEMENT
  2. bifați opțiunea PUBLIC
  3. faceți clic pe PROFILUL DEFAULT și setați-o la DA
  4. STUDIO > DATABASES > SYSTEM DATABASES > faceți clic dreapta pe MSDB și selectați NEW QUERY > apoi introduceți > grant execute on sp_send_dbmail topublic și faceți clic pe OK

Saurabh R S

Pentru a trimite e-mailuri din baza de date, utilizatorii trebuie să fie un utilizator în baza de date msdb și un membru al grupului DatabaseMailUserRole rol de bază de date în baza de date msdb. Pentru a adăuga utilizatori sau grupuri msdb la acest rol, utilizați SQL Server Management Studio sau executați următoarea instrucțiune pentru utilizatorul sau rolul care trebuie să trimită Database Mail:

EXEC msdb.dbo.sp_addrolemember @rolename = 'DatabaseMailUserRole'
    ,@membername = '<user or role name>';
GO

Alex K.

Acordați permisiunea de execuție pe sp_send_dbmail utilizatorului care execută procedura stocată sau adăugați-l la rolul msdb.DatabaseMailUser .

TChilders

Ok, doar pentru a adăuga la acest subiect, deoarece acestea au fost informații foarte bune, dar tot nu mi-au rezolvat complet problema. Dacă I a rulat interogarea în SSMS, aceasta a funcționat odată ce mi s-a acordat permisiunea de a executa procedura sp_send_dbmail în msdb. Cu toate acestea, atunci când o lucrare a fost rulată ca utilizator al meu, ar fi în continuare eșua.

Am citit o mulțime de lucruri pentru a ajunge la concluzia că trebuie să vă asigurați că sid-ul pentru proprietarul din BD se potrivește cu sid-ul proprietarului din BD principală:

--To get owner SID recorded in the master database for the current database
SELECT owner_sid FROM sys.databases WHERE database_id=DB_ID()
--To get the owner SID recorded for the current database owner
SELECT sid FROM sys.database_principals WHERE name=N'dbo'

Chiar dacă am dat acces la msdb și drepturi de execuție pe sp_send_dbmail, tot avea probleme legate de faptul că baza de date nu era demnă de încredere și că sids-ul proprietarului nu se potrivea. În consecință, a trebuit să activez Trustworthy pentru baza de date în care funcționam și să rezolv problema de proprietate:

ALTER DATABASE my_db SET TRUSTWORTHY ON;

ALTER AUTHORIZATION ON Database::my_db TO [domainuser];

A trebuit să trec printr-o mulțime de căutări pentru a găsi în cele din urmă acest lucru. scrierea care este mult mai lămuritoare.

Mark Nitsche

Am schimbat din greșeală opțiunea „Run As” pentru SQL Agent Job – Step de la „[User]” la „(Not Specified)”. Acest lucru a făcut ca Job-ul meu să înceapă să funcționeze.