저장 프로 시저를 실행하지만 쓰기는 허용하지 않는 방법은 무엇입니까?


11

SQL Server 2012 인스턴스에서 "읽기"사용자를 설정하고 싶습니다. 모든 테이블과 뷰에서 데이터를 검색하지만 업데이트하거나 삽입하지는 않는 저장 프로 시저 또는 함수 또는 직접 SQL 문을 실행할 수있는 권한을 부여하고 싶습니다 (예 : 아무것도 읽고 아무것도 쓰지 않음).

이름별로 각 함수 또는 저장 프로 시저에 대한 권한을 구체적으로 부여하지 않고이를 설정할 수 있지만 대신 테이블을 수정할 수있는 권한을 빼앗아 모든 함수 또는 저장 프로 시저에 대해 실행 권한을 부여 할 수 있습니까?

SQL Server 2008을 대신 실행하면 무엇이 변경됩니까?

설명 및 추가 :

  1. 저장 프로 시저가 데이터를 변경하면 사용자는 수정을 거부하거나 저장 프로 시저에 대한 액세스를 완전히 거부하는 오류 메시지를 받아야합니다.
  2. 잠재적 인 솔루션에 권한 거부가 포함 된 경우 거부 대신 특정 권한을 부여 할 수 없습니까?
  3. 하나의 명령문으로 데이터베이스의 모든 테이블, 뷰 등 (현재 및 미래에)에 거부를 적용 할 수 있습니까?

저는 여기에 처음입니다. 태그를 적절하게 설정하고 질문을 편집하십시오.
gt6989b

1
생각했던 @KrisGruttemeyer-그는 그것을 실행할 수는 있지만 어떤 종류의 오류가 발생합니다. 또는 sp의 목록을 지정할 필요가없는 한, 그는 실행할 권한이있는 한 실행을 허용하지 않습니다.
gt6989b

1
이 경우 SQL Server 권한에 대해 읽어야합니다. 3 권한 변종이있다 - GRANT, 권한을 부여하는 DENY권한을 거부하고, REVOKE제거 GRANT또는 DENY. GRANT또는 DENY사용자 없이는 저장 프로 시저에 대한 액세스 권한으로부터 권한을 상속받을 수 있습니다.
JNK

1
@ gt6989b DENY DELETE, INSERT, UPDATE데이터베이스 또는 스키마를 사용하는 경우 테이블 및 뷰에만 영향을 줄 것이라고 생각합니다.
JNK

1
@ gt6989b-이 의견에 제안 된 답변이 잘못되었다는 점에 주목하십시오. Paul White의 답변을 참조하십시오.
RLF

답변:


15

생각보다 쉽게 ​​달성 할 수 없습니다. 한 가지 방법은 새 사용자 정의 데이터베이스 역할을 작성하고 해당 역할에 필요한 모든 권한을 부여한 다음 새 역할에 사용자를 추가하는 것입니다. 이로 인해 앞으로이 권한 집합을 사용자 (또는 다른 사용자 정의 역할)에게보다 쉽게 ​​제공 할 수 있습니다. 다음 단계는 좋은 시작입니다.

-- The user-defined role containing all required permissions
CREATE ROLE Readers AUTHORIZATION dbo;

-- Give read-only access to all tables,
-- views on those tables, and in-line
-- functions
ALTER ROLE db_datareader ADD MEMBER Readers;

-- Example: add a user (Bob) to the role
ALTER ROLE Readers ADD MEMBER Bob;

이후 Bob은 데이터베이스에서 광범위한 읽기 전용 권한을 갖습니다. 그는 모든 테이블, 해당 테이블의 뷰 및 인라인 함수에서 읽을 수 있습니다. 그러나 절차를 실행하거나 인라인이 아닌 기능을 사용할 수는 없습니다.

독자가 액세스 할 수있는 안전한 기능 및 절차를 위해 독자 역할에 특정 권한을 부여해야합니다. 이 프로세스를보다 쉽게 ​​수행하기 위해 수행 할 수있는 단계가있을 수 있습니다 (예 : 개체를 스키마로 그룹화하고 개별 개체 대신 스키마에 대한 실행 권한 부여 등).

한 가지 알아야 할 것은 데이터 수정 권한이 없어도 수정중인 프로 시저와 오브젝트가 공통 소유자를 공유하는 경우 실행 권한이 부여 된 스토어드 프로 시저를 통해 리더가 데이터를 변경하지 못하게된다는 것입니다. 이 경우 명시 적 거부도 존중되지 않습니다. 이 기능을 소유권 체인이라고 합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.