Izinkan pengguna untuk melakukan apa pun dalam skema sendiri tetapi tidak membuat atau menjatuhkan skema itu sendiri

12

Saya telah membuat skema dalam SQL Azure dan memberikan izin berikut untuk peran database:

CREATE ROLE myrole AUTHORIZATION dbo;
EXEC sp_addrolemember 'myrole', 'myuser';

CREATE SCHEMA myschema AUTHORIZATION dbo;

GRANT ALTER, CONTROL, DELETE, EXECUTE, INSERT, REFERENCES, SELECT, UPDATE, VIEW 
DEFINITION ON SCHEMA::myschema TO myrole;

GRANT CREATE TABLE, CREATE PROCEDURE, CREATE FUNCTION, CREATE VIEW TO myrole;

Melalui izin yang ditentukan di atas myuserdapat membuat / menjatuhkan skema sendiri, sehingga untuk mengatasi masalah saya mencoba izin ALTER ANY SCHEMA. Tetapi izin ini juga menyangkal pengguna untuk membuat / menjatuhkan tabel.

Izin apa yang diperlukan untuk memungkinkan pengguna melakukan sesuatu dalam skema sendiri tetapi tidak dapat membuat atau menjatuhkan skema itu sendiri?

pengguna960567
sumber

Jawaban:

8

Tidak perlu memberikan CONTROLskema.
Izin yang diperlukan DROP SCHEMAada CONTROLdi skema atau ALTER ANY SCHEMAdi tingkat database, dan itulah sebabnya pengguna Anda dapat membatalkan skema. Menghapus dua izin ini akan mencegah pengguna yang terkait dengan peran membuat dan menjatuhkan skema (kecuali mereka memiliki izin tingkat yang lebih tinggi tentu saja).

Izin yang diperlukan untuk CREATE ALTERdan DROPobjek lainnya adalah CREATEizin untuk jenis objek (tabel \ procedure \ function \ view) dikombinasikan dengan ALTERizin pada skema.
Anda sudah memiliki izin ini dalam skrip Anda, jadi yang harus Anda lakukan hanyalah menghapus CONTROLizin. Untuk referensi, berikut adalah daftar pernyataan BOL diDDL mana Anda dapat menemukan izin yang diperlukan untuk semua jenis objek.

Untuk yang malas, ini adalah kode Anda setelah menghapus izin yang tidak perlu:

CREATE ROLE myrole AUTHORIZATION dbo;
EXEC sp_addrolemember 'myrole', 'myuser';

CREATE SCHEMA myschema AUTHORIZATION dbo;

GRANT ALTER, DELETE, EXECUTE, INSERT, REFERENCES, SELECT,
          UPDATE, VIEW DEFINITION ON SCHEMA::myschema TO myrole;

GRANT CREATE TABLE, CREATE PROCEDURE, CREATE FUNCTION, CREATE VIEW TO myrole;
Roi Gavish
sumber
Tetapi pengguna akan dapat membuat objek di bawah skema lain juga?
u23432534
4

Perhatikan bahwa karena skema baru memiliki otorisasi "dbo", pengguna akan dapat secara tidak langsung mengakses semua objek basis data di mana skema tersebut dimiliki oleh dbo.

Contoh:

select * from dbo.test; --fails

create view myschema.test
as 
select * 
from dbo.test; --view is created

select * from myschema.test;  --contents of dbo.test now revealed.

Ini adalah operasi yang benar dari mesin SQL Server; izin menembus ke skema lain dengan otorisasi yang sama. Untuk membatasi akses tersebut, berikut adalah opsi untuk pembuatan skema:

CREATE SCHEMA myschema AUTHORIZATION myrole;
Jonathan Mears
sumber
Ini adalah poin yang sangat bagus - pemilik skema sangat penting untuk izin yang dimiliki pengguna.
Costa