Jelenségek

Vegyük a következő esetet:

  • A modelladatbázisban felhasználó által definiált adattípust hozhat létre.

  • A nem rendszergazda felhasználók ezzel az adattípussal próbálnak ideiglenes táblát létrehozni a modelladatbázisban.

Ebben az esetben a felhasználó a következő hibaüzenetet fogja kapni:
 

Msg 15247, Level 16, State 4, Server <Server name>, Line 1

A felhasználónak nincs engedélye a művelet végrehajtásához.

A probléma oka

A CREATE TABLE webhely Könyvek Online témaköre az Engedélyek csoportban az alábbi megjegyzést tartalmazza:

Ha a CREATE TABLE utasítás bármelyik oszlopa clr-felhasználó által meghatározott típusúnak van definiálva, akkor a típus tulajdonjoga vagy a RÁ VONATKOZÓ engedély tulajdonosa szükséges. 

Ez a megjegyzés nem csak a CLR adattípusok, hanem a felhasználók által definiált adattípusok (UDT) esetén is igaz. ACLR-adattípusokviselkedéséről a "Felhasználói típusok használata adatbázisokban" című témakörben, az SQL Server Books Online-ban. 

MEGJEGYZÉS: Ez a probléma csak akkor áll elő, ha kifejezetten táblákat hoz létre, és nem amikor select INTO utasításokkal hoz létre táblákat. 

Megoldás

Adjon engedélyeket a felhasználó által definiált adattípushoz a megfelelő felhasználóknak az Ok szakaszban javasolt módon. A problémát az alábbi módszerek egyikével is megoldhatja.    

1. módszer:Hivatkozási engedély megadása a modelladatbázis nyilvános felhasználója számára.

Például:

CREATE TYPE dbo.udt_money FROM varchar(11) NOT NULL ;
ugrás
GRANT REFERENCES ON TYPE::d bo.udt_money TO public

MEGJEGYZÉS:Mielőtt ezt a módszert használjuk, gondosan mérje fel a biztonsági adatokat, mivel ez az engedély minden új adatbázisra át van va. 

2.módszer: Ha nem szeretné, hogy minden új adatbázis megőrizze a felhasználó által definiált adattípus definícióját és engedélyét, egy indítási tárolt eljárást használva létrehozhatja és hozzárendelheti a megfelelő engedélyeket csak ideiglenes adatbázis esetén.

Például:    

USE mesteroldal

ugrás

ELJÁRÁS LÉTREHOZÁSA SETUP_UDT_IN_TEMPDB

AS

EXEC ( 'USE tempdb;

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

GRANT REFERENCES ON TYPE::d bo.udt_money TO public;')

ugrás

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

ugrás

3. módszer:

Ideiglenes táblák használata helyett akkor érdemes táblaváltozókat használni, ha a felhasználói adattípusokat kell használnia az ideiglenes tárolási igényekhez. Ahhoz, hogy a táblaváltozók felhasználó által definiált adattípusra hivatkozni tudjanak, nem kell kifejezetten engedélyt engedélyeznie a felhasználó által definiált adattípushoz.

További segítségre van szüksége?

Ismeretek bővítése
Oktatóanyagok megismerése
Új szolgáltatások listájának lekérése
Csatlakozás a Microsoft Insiderek

Hasznos volt az információ?

Mennyire elégedett a fordítás minőségével?
Mi befolyásolta a felhasználói élményét?

Köszönjük a visszajelzését!

×