모든 저장 프로 시저에 실행 실행


147

다음 명령은 "MyUser"사용자에게 데이터베이스에서 모든 저장 프로 시저를 실행할 수있는 권한을 효과적으로 부여합니까?

GRANT EXECUTE TO [MyDomain\MyUser]

답변:


244

SQL Server 2008 이상 :

/* CREATE A NEW ROLE */
CREATE ROLE db_executor

/* GRANT EXECUTE TO THE ROLE */
GRANT EXECUTE TO db_executor

사용자 만 (역할이 아님) :

USE [DBName]
GO
GRANT EXECUTE TO [user]

28
+1 플러스 : 향후 스토어드 프로 시저 (예 : 데이터베이스에없는 프로 시저)에 EXECUTE 권한을 부여하기도하지만 나중에 생성됩니다.
marc_s

2
user대괄호 안에 있어야 할 수도 있습니다. 이것은 사용자가 도메인을 연결 했으므로 (예 : \ 문자가 포함되어 있기 때문에) 유스 케이스에서 적어도 부분적으로 사실입니다. 편집 : 이스케이프 처리되지 않은 슬래시 문자 수정
PrinceTyke

1
왜 db_ddladmin 역할에 사용자를 할당하지 않습니까? "db_ddladmin 고정 데이터베이스 역할의 멤버는 데이터베이스에서 모든 DDL (Data Definition Language) 명령을 실행할 수 있습니다." - 여기를보십시오
Michael Tobisch

1
@MichaelTobisch는 여기서 Stored Procedures를 실행해야합니다. DDL 역할은 작성, 변경, 삭제 등의 시나리오에서 사용해야합니다. 이 링크는 유용해야합니다. docs.microsoft.com/en-us/sql/relational-databases/security/…geeksforgeeks.org/sql-ddl-dml-dcl-tcl-commands
QMaster

2
그리고 다른 수준의 연구 단계를 절약 할 수 있도록 다음 단계로 사용자를 역할에 추가합니다. ALTER ROLE의 db_executor의 ADD 회원 YourUserNameHere
Piwaf

72

SQL Server 2005는 다음 과 같이 데이터베이스 원칙에 데이터베이스 실행 권한부여 하는 기능을 도입했습니다 .

GRANT EXECUTE TO [MyDomain\MyUser]

데이터베이스 범위에서 모든 스키마의 모든 저장 프로 시저를 암시 적으로 포함하는 권한을 부여합니다. 즉, 저장 프로시 저마다 권한을 명시 적으로 부여 할 필요가 없습니다.

보다 세분화하려는 경우 스키마 실행 권한부여하여 제한 할 수도 있습니다.

GRANT EXECUTE ON SCHEMA ::dbo TO [MyDomain\MyUser]

5
특정 스키마에 대해이 작업을 수행 할 수 있기 때문에 sys에 대한 권한을 피하십시오.
RemarkLima

17

위의 답변 외에도 다음을 추가하고 싶습니다.


대신 역할 에 권한을 부여한 다음 역할을 사용자에게 할당 할 수 있습니다. 다음을 myAppRights통해 역할 을 생성했다고 가정합니다.

CREATE ROLE [myAppRights] 

다음을 통해 실행 권한을 부여 할 수 있습니다

GRANT EXECUTE TO [myAppRights] 

그 역할에.


또는 스키마 수준 에서 수행하려는 경우 :

GRANT EXECUTE ON SCHEMA ::dbo TO [myAppRights]

또한 작동합니다 (이 예에서 역할 myAppRightsdbo나중에 스키마의 모든 요소에 대한 실행 권한을 갖습니다 ).

이 방법을 사용하면 한 번만 수행하면되고 나중에 변경해야 할 경우 모든 관련 응용 프로그램 권한을 사용자에게 쉽게 할당하거나 취소 할 수 있습니다. 특히 복잡한 액세스 프로파일을 생성하려는 경우에 특히 유용합니다.

참고 : 스키마에 역할을 부여하면 나중에 생성 할 요소에도 영향을 미칩니다. 의도 한 디자인에 따라 도움이되거나 그렇지 않을 수 있으므로 명심하십시오.


-5

[역할]에 대한 실행 권한 부여

이건 분명히 도와 줘


공개 역할에 실행을 부여하고 싶지 않으면 보안 문제가 발생합니다. 사용자 나 역할에 부여하십시오. 특정 프로세스에 실행 권한을 부여하는 것이 가장 좋은 방법이므로 누가 무엇을 공격하는지 제어 할 수 있습니다.
ammills01 01

여기의 풍자 만화는 특히 위험한 결과를 낳을 때 Q & A 사이트에는 적합하지 않습니다.
Christopher Brown

"모든 로그인은 공용 고정 서버 역할에 속하고 모든 데이터베이스 사용자는 공용 데이터베이스 역할에 속합니다. 로그인 또는 사용자에게 보안 개체에 대한 특정 권한이 부여되거나 거부되지 않은 경우 로그인 또는 사용자는 보안 가능 "따라서 PUBLIC에 권한을 부여하면 모든 사용자에게 해당 권한을 부여 할 수 있습니다. 이것은 큰 취약점입니다. 이 링크를 읽으십시오 : docs.microsoft.com/en-us/sql/relational-databases/security/…
QMaster

이와 같은 답변을 통해 보안이 취약한 웹 사이트와 데이터베이스가 너무 많지 않은 것은 놀라운 일이 아닙니다. 이런 남자.
Dave Lucre
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.