보통 저장 프로 시저를 만들 때 다음을 일종의 템플릿으로 사용합니다.
Create procedure <procedurename> <@param1 <type>, @param2 <type>, etc..> as begin <procedure> end
저장 프로 시저에만 실행 권한을 부여하는 방법이 있습니까?
예를 들어 …
Grant execute [User_Execute]
…하지만이 저장 프로 시저에만 해당됩니까?
다른 유사한 질문을 보았지만 모두 하나가 아닌 모든 저장 프로 시저를 참조하는 것 같습니다. create procedure
스크립트 내에서 권한을 지정할 수 있습니다. 특정 저장 프로 시저에 대해 GUI없이 권한을 설정할 수있는 방법에 대한 답변도 환영합니다.
편집 최고의 답변은 확실히 저를 올바른 방향으로 지적했습니다. 이것이 본질적으로 무엇입니까? 내가 찾고 있던 명령을 일괄 처리하고 저장 프로 시저와 함께 명령을 일괄 처리하는 것에 대해 생각하지 않았습니다. 어쨌든 꽤 매끄럽다 고 생각합니다.
Create procedure <procedurename> <@param1 <type>, @param2 <type>, etc..> as begin <procedure> end GO GRANT EXECUTE ON <procedurename> to <username> GO
댓글
- 수정 된 텍스트에 제공된 코드가 유효하며이 질문에 대한 정답입니다.
답변
GRANT EXECUTE ON dbo.procname TO username;
답변
테이블 자르기 저장 프로 시저와 같은 개체에 대한 권한 설정은 다음을 사용하여 수행 할 수 있습니다.
GRANT EXECUTE ON <schema>.<object> to <user>;
그러나 다음 위치에서 보안 권한을 부여 할 수도 있습니다. 로그인 및 사용자 수준 모두. 액세스가 필요한 개체 (예 : 실행)에 대해 필요한 권한 만 결정하고 부여 할 수 있습니다. EXECUTE AS
기능을 사용하면 다른 사용자를 가장하여 모든 기본 개체에 필요한 모든 권한을 부여 할 필요없이 코드를 실행하는 데 필요한 권한을 확인할 수 있습니다 (예 : 테이블). EXECUTE AS
는 저장 프로 시저, 함수, 트리거 등에 추가 할 수 있습니다.
저장 프로 시저 내에서 바로 다음과 같이 코드에 추가합니다.
CREATE PROCEDURE dbo.MyProcedure WITH EXECUTE AS OWNER
이 경우 호출되는 모듈의 소유자를 가장합니다. 또한 SELF, 또는 모듈을 생성 또는 변경하는 사용자를 가장 할 수 있습니다. 또는 모듈이 현재 사용자의 권한을 가져갈 수 있도록하는 CALLER, 또는 … OWNER를 가장 할 수 있습니다. 호출되는 프로 시저의 소유자 또는 … “user_name”으로 가장하여 특정 사용자로 가장하거나 “login_name”으로 가장하여 특정 로그인으로 가장합니다.
대부분의 경우 저장된 프로 시저에 대한 EXECUTE
권한 만 부여하면 저장된 프로 시저 내에서 참조되는 모든 개체에 대한 권한이 부여됩니다.
이렇게하면 필요하지 않습니다. 암시 적 권한을 부여합니다 (예 : 데이터 업데이트 또는 추가 프로세서 호출). 소유권 체인이이를 처리합니다. 이는 동적 SQL에 특히 유용하거나 CREATE TABLE
와 같은 고급 보안 작업을 생성해야하는 경우에 유용합니다. EXECUTE AS
는이를 고려할 수있는 편리한 도구입니다.
이 예는이 모든 것을 명확히하는 데 도움이 될 수 있습니다.
다음을 사용하여 NoPrivUser라는 사용자를 만듭니다. 데이터베이스에 대한 공개 액세스 (예 : dbadb) :
USE [master]; GO CREATE LOGIN [NoPrivUser] WITH PASSWORD=N"ABC5%", DEFAULT_DATABASE=[dbadb], CHECK_EXPIRATION=ON, CHECK_POLICY=ON; GO USE [DBAdb]; GO CREATE USER [NoPrivUser] FOR LOGIN [NoPrivUser]; GO
참고 :이 절차의 생성자 또는 소유자는 대상 데이터베이스 내에서 테이블 생성 권한이 필요합니다.
use DBAdb go CREATE PROCEDURE dbo.MyProcedure WITH EXECUTE AS OWNER truncate table MyTable GO GRANT EXEC ON dbo.MyProcedure TO NoPrivUser; GO -- Now log into your database server as NoPrivUser and run the following.
EXECUTE AS
절을 사용하면 저장 프로 시저가 개체 소유자의 컨텍스트에서 실행됩니다. 이 코드는 dbo.MyTable
를 성공적으로 만들고 행이 성공적으로 삽입되었습니다. 이 예에서 사용자 NoPrivUser
는 테이블을 수정하거나이 테이블의 데이터를 읽거나 수정할 수있는 권한이 전혀 없습니다.
이 절차의 맥락에서 코딩 된이 특정 작업을 완료하는 데 필요한 권한에 대해 설명합니다.
이러한 권한을 영구적으로 할당하지 않고도 높은 보안 권한이 필요한 작업을 수행 할 수있는 저장 프로 시저를 만드는이 방법은 매우 유용합니다.
댓글
- 이것은 어제 SO에 게시 한 것과 동일한 답변 입니다. 또한 가독성을 위해 형식을 지정해야했습니다.
답변
데이터베이스 로그인 선택-> 이전 이미지에서와 같이 Securable로 이동하고 검색 버튼을 클릭합니다. 검색 버튼을 클릭하면 다음 창에서 개체 유형을 추가 할 수 있습니다.
개체 유형 버튼을 클릭하면 다양한 개체가있는 “개체 유형 선택”창이 나타납니다. 이제 보시면 저장 프로 시저가 개체 유형 영역에 나열됩니다. 이제 권한을 제공 할 특정 저장 프로 시저를 선택합니다.
댓글
- 먼저 질문에 답했을 때 5 년이 넘었습니다. OP가 GUI를 사용하지 않고 스크립트에 포함 할 수있는 ' 솔루션을 특별히 요청한 것을 제외하고는 괜찮습니다. 귀하의 답변으로는이를 해결할 수 없습니다.