SQL Server (2008) ile, şema içinde tablo oluşturma izni verebilir misiniz?


14

SQL Server 2008'de güvenlikle çalışarak, bir kullanıcıya CREATE TABLE izinleri vermeye çalışıyorum, ancak yalnızca belirli bir şemada. CREATE TABLE izni yalnızca veritabanı düzeyinde mi geçerlidir?

Kullanıcıyı yalnızca bir şema içinde tablo oluşturacak şekilde sınırlayabilir miyim?

Denedim:

USE [databasename]
GRANT CONTROL ON Schema :: [schemaname] TO [username]
GO

ve

USE [databasename]
GRANT ALTER ON Schema :: [schemaname] TO [username]
GO

Ancak, kullanıcı yine de hedef şema içinde bir tablo oluşturamıyor. Ben bu kadar, kullanıcı bir tablo oluşturabilirsiniz şapka kadar değil:

USE [databasename]
GRANT CREATE TABLE to [username]
GO

HİBE

HİBE Veritabanı İzinleri

Yanıtlar:


12

SQL Server 2008 yardımına göre:

Veritabanında CREATE TABLE izni ve tablonun oluşturulduğu şemada ALTER izni gerekir.

Ben sadece bir test veritabanında EXECUTE AS kullanarak bunu sınadım ve ben ALTER izni olan şemada bir tablo oluşturmak başardı, ancak dbo şemasında değil (ki ben ALTER izni vermedi). Dolayısıyla, şemalarda ALTER izni ile çok liberal olmadığınız sürece, bunu yapmanın yolu bu olmalıdır.


1
Evet, şimdi görüyorum. Kullanıcı "CREATE TABLE" iznine sahip olsa da, başka bir iznin verilmediği şemalarda tablo oluşturamıyor.
RyanW

Sadece bu senaryoyu etkinleştirmek için battaniye OLUŞTURMA izni vermeniz kesinlikle talihsiz görünüyor.
MgSam

6

Belirli bir veritabanında belirli bir kullanıcıya tablo oluşturma izni vermek için yalnızca CREATE TABLE izinleri değil, aynı zamanda şema için ALTER izinleri (ör. DBO) gerekir.

USE [databasename]
GRANT ALTER ON Schema :: [schemaname] TO [username]
GRANT CREATE TABLE TO [username]
GO

Örneğin;

USE db_mydatabase
GRANT ALTER ON Schema :: DBO TO user_mydatabase
GRANT CREATE TABLE TO user_mydatabase
GO

1

2008 R2'deki şemalar için geçerli olan izinlerin belgelenmesinde böyle bir izin hakkında hiçbir şey yoktur: http://msdn.microsoft.com/en-us/library/ms187940.aspx

Bu nedenle şu sonuca varırdım: hayır yapamazsınız, tablo oluştur yalnızca bir veritabanı düzeyinde kontrol edilebilir (bu, tüm güvenilirler için geçerli görünecektir).


Teşekkürler, katılıyorum, bu seviyede hiçbir şey yok. @ Db2 belirttiği gibi, veritabanı düzeyi "CREATE TABLE" izni, kullanıcının şemada başka izni yoksa tablo oluşturmasına izin vermek için yeterli değildir.
RyanW

0

Tabi ki yapabilirsin. User1'iniz varsa, varsayılan şemasını user1 olarak da tanımlayın. Bu kullanıcıya veritabanı izinlerinde CREATE TABLE ver. Bu kadar. kullanıcı1 yalnızca kullanıcı1 şemasında tablolar oluşturabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.