사용자가 자신의 스키마 내에서 작업을 수행 할 수 있지만 스키마 자체를 만들거나 삭제하지 않아야합니다.


12

SQL Azure에서 스키마를 만들고 데이터베이스 역할에 다음 권한을 부여했습니다.

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;

위에서 정의한 권한을 통해 myuser자신의 스키마를 생성 / 삭제할 수 있으므로 문제를 극복하기 위해 ALTER ANY SCHEMA 권한을 시도했습니다. 그러나이 권한은 또한 사용자가 테이블을 작성 / 삭제하는 것을 거부합니다.

사용자가 자신의 스키마 내에서 작업을 수행 할 수 있지만 스키마 자체를 만들거나 삭제할 수 없도록하려면 어떤 권한이 필요합니까?

답변:


8

CONTROL스키마 를 부여 할 필요가 없습니다 .
에 필요한 권한 DROP SCHEMA중 하나입니다 CONTROL스키마 또는 ALTER ANY SCHEMA데이터베이스 레벨에서, 그리고 사용자가 스키마를 제거 할 수 있었다 이유입니다. 이 두 가지 권한을 제거하면 역할 관련 사용자가 스키마를 만들고 삭제하지 못하게됩니다 (물론 더 높은 수준의 권한이없는 경우).

CREATE ALTERDROP기타 객체에 대한 필수 권한 은 스키마에 대한 권한 CREATE과 결합 된 객체 유형 (table \ procedure \ function \ view) ALTER에 대한 권한입니다.
스크립트에 이러한 권한이 이미 있으므로 CONTROL권한을 제거하기 만하면됩니다. 참고로 다음은 모든 개체 유형에 필요한 권한을 찾을 수 있는 BOLDDL 문 목록입니다 .

게으른 경우 불필요한 권한을 제거한 후 코드는 다음과 같습니다.

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;

그러나 사용자는 다른 스키마에서도 객체를 만들 수 있습니까?
u23432534

4

새 스키마에는 "dbo"권한이 부여되므로 사용자는 dbo가 스키마를 소유 한 모든 데이터베이스 오브젝트에 간접적으로 액세스 할 수 있습니다.

예:

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.

이것은 SQL Server 엔진의 올바른 작동입니다. 권한은 동일한 권한으로 다른 스키마에 침투합니다. 이러한 액세스를 제한하려면 다음은 스키마 작성 옵션입니다.

CREATE SCHEMA myschema AUTHORIZATION myrole;

이것은 매우 좋은 점입니다. 스키마의 소유자는 사용자의 권한에 중요합니다.
코스타
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.