Ich habe Probleme beim Ausführen einer Funktion.
Folgendes habe ich getan:
- Erstellen Sie eine Funktion mit SQL Server Management Studio. Es wurde erfolgreich erstellt.
- Ich habe dann versucht, die neu erstellte Funktion auszuführen, und hier ist, was ich bekomme:
Die EXECUTE-Berechtigung wurde für das Objekt 'xxxxxxx', die Datenbank 'zzzzzzz' und das Schema 'dbo' verweigert.
sql-server
Upendra Parmar
quelle
quelle
GO
undCreate
in verschmolzenGOCreate
. Andere Syntaxfehler scheinen diesen Fehler ebenfalls zu verursachen.Antworten:
Klingt so, als müssten Sie dem Benutzer (oder einer Gruppe, zu der er gehört) die Ausführungsberechtigung für die betreffende gespeicherte Prozedur erteilen.
Zum Beispiel könnten Sie den Zugriff folgendermaßen gewähren:
quelle
GRANT EXEC TO PUBLIC
, um Zugriff auf alle Objekte in der Datenbank zu gewährenDie beste Lösung, die ich gefunden habe, ist das Erstellen einer neuen Datenbankrolle, dh
und erteilen Sie dann diese Rolle Exec-Berechtigung.
Wenn Sie nun zu den Eigenschaften des Benutzers gehen und zur Benutzerzuordnung gehen und die Datenbank auswählen, in der Sie eine neue Rolle hinzugefügt haben, wird jetzt eine neue Rolle in der Mitgliedschaft in der Datenbankrolle für: angezeigt
Für weitere Informationen lesen Sie den vollständigen Artikel
quelle
EXEC sp_addrolemember @rolename = N'db_executor', @membername = N'processAPI'
In SQL Server Management Studio:
geh einfach zu
security->schema->dbo
.Doppelklicken Sie auf dbo, klicken Sie dann auf
permission tab->(blue font)view database permission
und scrollen Sie nach den erforderlichen Feldern wie"execute".
Hilfe bei der Auswahl vongrant
oderdeny
Steuerelementen. Hoffe das wird helfen :)quelle
Sie müssen so etwas ausführen
quelle
[domain\user]
eher tun als'domain\user'
Dies funktioniert, wenn Sie versuchen, Benutzern oder Rollen Berechtigungen zu erteilen.
Verwenden von Microsoft SQL Server Management Studio:
quelle
Das Erteilen einer solchen Berechtigung kann gefährlich sein, insbesondere wenn Ihre Webanwendung denselben Benutzernamen verwendet.
Jetzt hat der Webbenutzer (und das gesamte World Wide Web) auch die Berechtigung, Objekte in Ihrer Datenbank zu erstellen und abzulegen. Denken Sie an SQL Injection!
Ich empfehle, Execute-Berechtigungen nur dem bestimmten Benutzer für das angegebene Objekt wie folgt zu gewähren:
Jetzt kann der Benutzer myusernameNoquotes die Prozedur gespeicherte ProzedurnameNoquotes ohne andere unnötige Berechtigungen für Ihre wertvollen Daten ausführen.
quelle
Sie haben nicht das Recht, es auszuführen, obwohl Sie über genügend Berechtigungen verfügen, um es zu erstellen.
Weitere Informationen finden Sie unter GRANT-Objektberechtigungen (Transact-SQL).
quelle
Wenn Sie Probleme wie die oben gestellte Frage bezüglich der Ausnahme haben, die bei der Ausführung der Lösung ausgelöst wird, ist das Problem die Berechtigung, die den Benutzern dieser Gruppe nicht ordnungsgemäß für den Zugriff auf die Datenbank / gespeicherte Prozedur erteilt wurde. Alles, was Sie tun müssen, ist, etwas wie das zu tun, was ich unten habe, und meinen durch Ihren Datenbanknamen, gespeicherte Prozeduren (Funktion) und die Art der Berechtigung oder Rolle zu ersetzen oder wem Sie den Zugriff gewähren.
/ ****** Objekt: StoredProcedure [dbo]. [GetAllEmployees] Skriptdatum: 27.01.2016 16:27:27 ****** /
quelle
Sie können jedem die Ausführungserlaubnis geben:
"Öffentlich" ist die Standarddatenbankrolle, in der alle Benutzer Mitglied sind.
quelle
Ich hatte das gleiche Problem und habe es gelöst, indem ich dem Datenbankbenutzer auch die Berechtigung db_owner erteilt habe.
quelle
Wenn Sie diesen Benutzer speziell für eine bestimmte Datenbank festlegen, legen Sie ihn möglicherweise nicht als db_owner in der "Benutzerzuordnung" von Eigenschaften fest
quelle
Sie sollten besser die Serverrollen ändern, die für Sicherheitsberechtigungen konzipiert wurden. Fügen Sie Ihrem Benutzer die Sysadmin-Serverrolle hinzu. Für eine bessere Sicherheit haben Sie möglicherweise Ihre benutzerdefinierten Serverrollen. Aber dieser Ansatz gibt Ihnen das, was Sie jetzt wollen.
Viel Glück
quelle
Hier erfahren Sie, wie Sie einem nicht öffentlichen Benutzer die Berechtigung erteilen.
Direkte Abfrage:
Use MyDatabase Grant execute on [dbo].[My-procedures-name] to [IIS APPPOOL\my-iis-pool] Go
quelle