Ich entschuldige mich, wenn diese Frage eine andere bereits gestellte wiederholt. Ich habe stundenlang gesucht und keine gefunden, die zu meiner Situation passt.
Gewünschtes Ergebnis
Ein Benutzer, der die SQL-Authentifizierung verwendet, hat Ausführungsberechtigungen für Datenbank1 auf Server1 (Standardinstanz), und das ist es. Der Benutzer führt eine gespeicherte Prozedur aus, die als Teil seines Prozesses auf Datenbank 2 auf Server1 \ Instanz2 zugreift. Ich möchte, dass es sicher und einfach ist (beide sind wichtig).
Mehr Info
Meine Windows-Anmeldeinformationen haben Zugriff auf beide Instanzen (die sich auf demselben Server befinden). Daher kann ich die gespeicherte Prozedur unter meinem Login problemlos ausführen. Ich möchte dem Benutzer jedoch nicht meine Zugriffsebene gewähren. Ich muss auch eine SQL-Anmeldung verwenden, da sich der Benutzer nicht in der Domäne befindet.
Was ich möchte, wäre, der gespeicherten Prozedur meine Zugriffsebene nur für diese Prozedur zu geben. Da ich ein Systemadministrator bin, würde dies dem Benutzer alles geben, was er für dieses Verfahren benötigt. Wenn ich das zum Laufen bringen würde, würde ich wahrscheinlich nur zu diesem Zweck ein Konto erstellen, anstatt mein Konto zu verwenden, aber so oder so wäre es sicher, da ich kontrolliere, was der gespeicherte Prozess tut.
Ich habe versucht, die Anweisung "WITH EXECUTE AS" in meinen gespeicherten Prozess einzufügen, konnte sie jedoch nicht dazu bringen, meine Windows-Anmeldeinformationen zu übernehmen. Wenn ich es einfüge, wird beim Kompilieren des gespeicherten Prozesses der folgende Fehler angezeigt:
Kann nicht als Benutzer 'domain \ jdoe' ausgeführt werden, da dieser nicht vorhanden ist oder Sie keine Berechtigung haben.
Der Benutzer ist auf beiden Servern Sysadmin, wie ich bereits sagte, daher bin ich mir nicht sicher, was er noch benötigt.
Ich habe Folgendes untersucht:
- VERTRAUEN - Ich würde meine Datenbank lieber nicht offenlegen und das sieht beängstigend aus
- Verbindungsserver - Ich möchte keine zusätzlichen Berechtigungen erteilen. Ich vertraue nicht darauf, dass die andere Datenbank Zugriff auf meine Datenbank hat, und ich vertraue nicht darauf, dass meine Datenbank Zugriff auf alle anderen Datenbanken hat.
- Zertifikate - Dies scheint kompliziert und schwierig. Ich bin mir nicht sicher, ob es die Mühe wert ist, es sei denn, ich könnte einen sehr einfachen Weg finden, dies zu tun und zu warten.
- Eigentumsverkettung - Wieder beängstigend. Es sieht so aus, als würde dies mehr Sicherheitsprobleme verursachen, wenn mein Ziel darin besteht, Sicherheitsprobleme zu vermeiden.
- Gespiegelter Benutzer - Ich habe sogar denselben Benutzer (offensichtlich mit einer anderen SID) auf der anderen Serverinstanz erstellt und ihm dasselbe Kennwort gegeben. No Go.
Ich habe das Gefühl, dass mir etwas Offensichtliches fehlt, aber ich bin mir nicht sicher, was es ist. Da ich den ganzen Tag meinen Kopf gegen die Wand geschlagen habe, bin ich wahrscheinlich zu nah dran, um es zu sehen. Ich würde es sehr schätzen, wenn jemand hier mir helfen oder mich in die richtige Richtung weisen könnte. Ich werde sagen, dass ich viele MSDN-Artikel gelesen habe (Junge, hasse ich sie - sie scheinen mir nie zu sagen, was ich wissen möchte). Was ich wirklich gerne hätte, ist ein einfaches, leicht zu befolgendes Tutorial, das mich durch die Vorgehensweise führt. Ansonsten wäre sogar ein allgemeiner Hinweis auf die Richtung, in die ich gehen muss, hilfreich.