Kullanıcının kendi şeması dahilinde herhangi bir şey yapmasına izin verin, ancak şemayı kendisinin oluşturup bırakmayın


12

SQL Azure'da bir şema oluşturdum ve bir veritabanı rolüne aşağıdaki izinleri verdim:

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;

Yukarıda tanımlanan izinler aracılığıyla myuserkendi şemasını oluşturabilir / bırakabilir, bu yüzden sorunun üstesinden gelmek için ALTER ANY SCHEMA iznini denedim. Ancak bu izin, kullanıcının tablo oluşturmasını / bırakmasını da reddeder.

Kullanıcının kendi şeması içinde herhangi bir şey yapmasına izin vermek, ancak şemayı kendisinin oluşturamaması veya bırakamaması için ne gibi izinler gerekir?

Yanıtlar:


8

Şemaya gerek yoktur CONTROL.
İçin gerekli izin DROP SCHEMAya olduğu CONTROLşema üzerinde veya ALTER ANY SCHEMAveritabanı düzeyinde ve kullanıcı şema damla başardı yüzden. Bu iki iznin kaldırılması, rolle ilişkili kullanıcıların şemayı oluşturmasını ve bırakmasını önler (tabii ki daha üst düzey izinleri yoksa).

Gerekli izinler CREATE ALTERve DROPdiğer nesneler, şemadaki izinle CREATEbirlikte nesne türünün (table \ process \ function \ view) ALTERiznidir.
Senaryonuzda bu izinlere zaten sahipsiniz, bu yüzden tek yapmanız gereken CONTROLizni kaldırmaktır . Başvuru için, burada tüm nesne türleri için gerekli izni bulabileceğiniz bir BOL ifade listesi bulunmaktadır DDL.

Tembel için, gereksiz izni kaldırdıktan sonra kodunuz:

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;

Ancak kullanıcı diğer şema altında da nesne oluşturabilecek mi?
u23432534

5

Yeni şema "dbo" yetkisine sahip olduğundan, kullanıcının şemanın dbo'ya ait olduğu tüm veritabanı nesnelerine dolaylı olarak erişebileceğini unutmayın.

Misal:

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.

Bu, SQL Server motorunun doğru çalışmasıdır; izinler aynı yetkilendirme ile diğer şemalara nüfuz eder. Bu tür erişimi kısıtlamak için şema oluşturmak için bir seçenek vardır:

CREATE SCHEMA myschema AUTHORIZATION myrole;

Bu çok iyi bir nokta - şemanın sahibi, kullanıcının sahip olduğu izinler için çok önemlidir.
Kosta
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.