SQL Server - memberikan izin ke seluruh skema vs. objek?

25

Saya sangat hijau ketika datang ke dunia manajemen izin basis data di SQL Sever.

Mari kita berikan contoh sederhana.

Katakanlah akun 'admin' adalah pemilik skema A, B, dan C.

Ada akun lain 'antek' yang Anda ingin memiliki hak penuh (perbarui / hapus / masukkan / pilih / ubah) pada objek apa pun (tabel / tampilan) yang dibuat di bawah skema A, B, dan C.

Apakah ini mungkin? Atau apakah Anda harus menjalankan pernyataan hibah masing-masing dan setiap kali Anda menambahkan tabel / tampilan di bawah skema ini? (Sepertinya agak konyol bagi saya).

pengguna45867
sumber

Jawaban:

36

Kamu bisa GRANT skema izin yang efektif untuk semua yang ada dan segala sesuatu yang akan ada dalam skema itu.

Berikan Izin Skema

GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA :: <schema> TO <user>;

Lebih jauh dari itu, jika Anda ingin kemudian menolak izin pada objek tertentu dalam skema itu, Anda bisa melakukannya.

Menolak Izin Objek

DENY INSERT ON OBJECT::<schema>.<object> TO <user>;
Mark Sinkinson
sumber
1
Gunakan juga tanda kurung siku jika skema atau nama pengguna memiliki karakter khusus. misal.... SCHEMA :: [schema] TO [company-name/joshua.duxbury]
Joshua Duxbury
Tidak bekerja di Azure, ada ide mengapa? (perintahnya bekerja, tetapi SSMS muncul dan mengatakan "Anda bukan pemilik Db .. bla bla bla. Anda mungkin tidak dapat menyimpan tabel" dan tentu saja, Anda tidak bisa (melakukan Grant ALL ke database (menunjukkan izin 'Database', '<db name>', TheUserId, 'Create Table', dan state_desc dari 'GRANT') Apakah ada sihir lain yang diperlukan? Atau apakah Azure hanya dapat digunakan oleh Dbo?
Traderhut Games
13

Untuk menyederhanakan sedikit lebih jauh, Anda dapat menggunakan peran untuk melakukan pekerjaan yang Anda cari.

Setelah Anda menetapkan izin untuk peran tersebut, Anda bisa menambahkan pengguna ke peran tersebut. Dengan cara ini Anda tidak perlu mengelola izin untuk setiap pengguna. Pengguna mewarisi izin yang diberikan pada peran.

Di bawah ini adalah contoh untuk membantu Anda memulai:

 -- Create the database role
CREATE ROLE TableSelector AUTHORIZATION [dbo]
GO
 ---- Grant access rights to a specific schema in the database
GRANT 
      SELECT, INSERT, UPDATE, DELETE, ALTER 

ON SCHEMA::dbo
      TO TableSelector 
GO

-- Add an existing user to the new role created 
EXEC sp_addrolemember 'TableSelector', 'MyDBUser'
GO

-- Revoke access rights on a schema from a role 
DENY ALTER  -- you can customize here ...
ON SCHEMA::dbo
      TO TableSelector 
Kin Shah
sumber