Dengan SQL Server (2008), dapatkah Anda memberikan izin membuat tabel dalam skema?

14

Bekerja dengan keamanan di SQL Server 2008, saya mencoba untuk memberikan izin CREATE TABLE pengguna, tetapi hanya dalam skema tertentu. Apakah izin CREATE TABLE hanya berlaku di tingkat basis data?

Bisakah saya membatasi pengguna untuk membuat tabel hanya dalam skema?

Saya sudah mencoba:

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

dan

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

Namun, pengguna masih tidak dapat membuat tabel dalam skema target. Baru setelah saya menjalankan ini, pengguna dapat membuat tabel:

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

HIBAH

Izin Database GRANT

RyanW
sumber

Jawaban:

12

Menurut bantuan SQL Server 2008:

Membutuhkan izin CREATE TABLE dalam database dan ALTER izin pada skema di mana tabel sedang dibuat.

Saya baru saja menguji ini dengan menggunakan EXECUTE AS dalam database uji, dan saya bisa membuat tabel dalam skema yang memiliki izin ALTER, tetapi tidak dalam skema dbo (yang saya tidak memberikan izin ALTER). Jadi selama Anda belum menjadi terlalu liberal dengan izin ALTER pada skema, ini harus menjadi cara untuk melakukannya.

db2
sumber
1
Ya, saya melihatnya sekarang. Meskipun pengguna memiliki izin "CREATE TABLE" pada basis data, ia tidak dapat membuat tabel di skema di mana tidak ada izin lain yang diberikan.
RyanW
Sangat disayangkan bahwa Anda harus memberikan izin selimut CREATE TABLE hanya untuk mengaktifkan skenario ini.
MgSam
6

Memberi izin untuk membuat tabel ke pengguna tertentu dalam database tertentu tidak hanya memerlukan izin CREATE TABLE tetapi juga membutuhkan izin ALTER untuk skema, misalnya DBO.

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

Sebagai contoh;

USE db_mydatabase
GRANT ALTER ON Schema :: DBO TO user_mydatabase
GRANT CREATE TABLE TO user_mydatabase
GO
Andy Davies
sumber
1

Tidak ada apa pun tentang izin tersebut dalam dokumentasi izin yang berlaku untuk skema pada 2008 R2: http://msdn.microsoft.com/en-us/library/ms187940.aspx

Oleh karena itu saya akan menyimpulkan: tidak, Anda tidak bisa, membuat tabel hanya dapat dikontrol pada tingkat basis data (ini tampaknya berlaku untuk semua keamanan).

Richard
sumber
Terima kasih, saya setuju, tidak ada tentang level itu. Seperti yang dicatat oleh @ db2, izin tingkat database "CREATE TABLE" tidak cukup untuk memungkinkan pengguna membuat tabel jika mereka tidak memiliki izin lain pada skema.
RyanW
0

Tentu kamu bisa. Jika Anda memiliki user1, maka tentukan skema defaultnya sebagai user1 juga. Berikan Tabel CREATE dalam izin basis data kepada pengguna ini. Itu dia. user1 hanya bisa membuat tabel dalam skema user1.

pengguna78128
sumber