Ich habe eine Datenbank angehängt und versucht, den Eigentümer in ein gültiges Login zu ändern.
Ich habe die Anweisung verwendet: ALTER AUTHORIZATION ON database :: my_db_name TO "sa". Die Datenbankeigenschaften zeigten, dass der neue Eigentümer "sa" war. Es wurden jedoch weiterhin Berechtigungsfehler für uneingeschränkte CLR-Assemblys (0x80FC80F1, 0x8013150A) angezeigt.
Ich habe das Problem behoben, indem ich stattdessen die folgende Anweisung verwendet habe: EXEC sp_changedbowner 'sa'; um den Datenbankeigentümer zu ändern.
Meine Frage ist, was ist der Unterschied zwischen diesen beiden Methoden zum Ändern des Datenbankeigentümers. Sind sie gleichwertig? Mir scheint klar zu sein, dass sp_changedbowner etwas mehr / Richtiges tut, was die Änderung der Berechtigungsanweisung nicht tut.
Falls Sie interessiert sind ... bevor ich Dinge mit sp_changedbowner reparierte, habe ich versucht:
- Setzen der vertrauenswürdigen Eigenschaft der Datenbank auf EIN; Tatsächlich habe ich das ein paar Mal gemacht. Ich weiß, dass es eine Anforderung ist, uneingeschränkte, nicht signierte benutzerdefinierte CLR-Assemblys auszuführen
- Ändern des Besitzers jeder CLR-Assembly in dbo, da der Besitzer leer war, aber anscheinend war dbo bereits der Besitzer, und in SSMS ist es einfach immer leer.
- Ändern des Besitzers jeder CLR-Assembly in etwas anderes, aber das funktioniert nicht, da Assemblys mit abhängigen Assemblys anscheinend immer denselben Eigentümer benötigen. Es ist jedoch unmöglich, den Eigentümer auf beiden mit der bereitgestellten Schnittstelle gleichzeitig zu ändern.
- Aufruf von GRANT UNSAFE ASSEMBLY an [sa]; Anscheinend können Sie diesem integrierten Konto zusammen mit einigen anderen keine Berechtigungen erteilen. Sie haben bereits die Erlaubnis
- Aufruf von GRANT UNSAFE ASSEMBLY an [NT AUTHORITY \ NETWORK SERVICE] (die Kontoaufrufmethoden in den Assemblys); Keine Fehler, aber anscheinend nichts erreicht (möglicherweise die Fehlernummer geändert? Die Meldung hat sich jedoch nie geändert).
- ... und wahrscheinlich ein paar andere Dinge, an die ich mich nicht erinnern kann.
Ich glaube
ALTER_AUTHORIZATION
undsp_changedbowner
kann beide den Besitz des Datenbankobjekts ändern. Der Unterschied zwischen den Befehlen besteht natürlich darin, dassALTER_AUTHORIZATION
andere Dinge geändert werden können (z. B. der Besitz von Tabellen), währendsp_changedbowner
nur der Eigentümer der Datenbank geändert werden soll.Das von Ihnen angegebene Verhalten klingt jedoch sehr seltsam. Können Sie es replizieren?
quelle