Sie können nicht auf einen benutzerdefinierten Datentyp verweisen, der in der Modelldatenbank in tempdb definiert ist.

Arbeiten Sie überall, von jedem beliebigen Gerät, mit Microsoft 365

Führen Sie ein Upgrade auf Microsoft 365 durch, um überall mit den neuesten Funktionen und Updates zu arbeiten.

Upgrade jetzt ausführen

Problembeschreibung

Stellen Sie sich folgendes Szenario vor:

  • Sie erstellen einen benutzerdefinierten Datentyp in der Modelldatenbank.

  • Ein Benutzer, der kein Systemadministrator ist, versucht, diesen Datentyp zum Erstellen einer temporären Tabelle in der Modelldatenbank zu verwenden.

In diesem Szenario wird dem Benutzer die folgende Fehlermeldung angezeigt:
 

Msg 15247, Ebene 16, Zustand 4, Server <Servername>, Zeile 1

Der Benutzer verfügt nicht über die Berechtigung zum Ausführen dieser Aktion.

Ursache

Das Thema "Books Online" für CREATE TABLE enthält die folgende Notiz im Abschnitt Berechtigungen:

Wenn spalten in der CREATE TABLE-Anweisung so definiert sind, dass sie einen benutzerdefinierten CLR-Typ haben, ist entweder der Besitz des Typs oder die Berechtigung VERWEISE erforderlich. 

Diese Notiz gilt nicht nur für CLR-Datentypen, sondern auch für jeden benutzerdefinierten Datentyp (BET). Informationen zum Verhalten vonCLR-Datentypenfinden Sie im Thema "Verwenden von benutzerdefinierten Typen über Datenbanken hinweg" in den SQL Server Books Online. 

HINWEIS: Dieses Problem wird nur beim expliziten Erstellen von Tabellen und nicht beim impliziten Erstellen von Tabellen mithilfe von SELECT INTO-Anweisungen auftreten. 

Fehlerbehebung

Erteilen Von Berechtigungen für benutzerdefinierte Datentypen für die entsprechenden Benutzer, wie im Abschnitt Ursache vorgeschlagen. Sie können das Problem auch umgehen, indem Sie eine der folgenden Methoden verwenden.    

Methode 1:Erteilen sie dem öffentlichen Benutzer in der Modelldatenbank die Berechtigung VERWEISE.

Beispiel:

CREATE TYPE dbo.udt_money FROM varchar(11) NOT NULL ;
Gehe zu
GEWÄHREN VON VERWEISEN AUF TYPE::d bo.udt_money TO public

HINWEIS:Bevor Sie diese Methode verwenden, werden die Sicherheitsauswirkungen sorgfältig ausgewertet, da diese Berechtigung auf jede neue Datenbank weitergegeben wird. 

Methode 2:Wenn nicht jede neue Datenbank die Definition und Berechtigungen für diesen benutzerdefinierten Datentyp beibehalten soll, können Sie eine gespeicherte Startprozedur verwenden, um die entsprechenden Berechtigungen nur in der tempdb-Datenbank zu erstellen und zuzuordnen.

Beispiel:    

USE Master

Gehe zu

CREATE PROCEDURE setup_udt_in_tempdb

AS

EXEC ( 'USE tempdb;

CREATE TYPE dbo.udt_money FROM varchar(11) NOT NULL;

GEWÄHREN VON VERWEISEN AUF TYPE::d bo.udt_money TO public;')

Gehe zu

EXEC sp_procoption "setup_udt_in_tempdb" , "startup" , "on"

Gehe zu

Methode 3:

Statt temporäre Tabellen zu verwenden, sollten Sie Tabellenvariablen verwenden, wenn Sie für temporäre Speicheranforderungen auf benutzerdefinierte Datentypen verweisen müssen. Damit Tabellenvariablen auf benutzerdefinierte Datentypen verweisen können, müssen Sie keine expliziten Berechtigungen für den benutzerdefinierten Datentyp erteilen.

Benötigen Sie weitere Hilfe?

Ihre Office-Fähigkeiten erweitern
Schulungen erkunden
Neue Funktionen als Erster erhalten
Microsoft Insider beitreten

War diese Information hilfreich?

Vielen Dank für Ihr Feedback!

Vielen Dank für Ihr Feedback. Es klingt, als ob es hilfreich sein könnte, Sie mit einem unserer Office-Supportmitarbeiter zu verbinden.

×