단일 저장 프로 시저에 대한 실행 권한을 어떻게 부여합니까?


40

일반적으로 저장 프로 시저를 만들 때 다음을 정렬 템플릿으로 사용합니다.

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

편집 한 텍스트에 제공된 코드가 유효하며이 질문에 대한 정답입니다.
초에 ninty9notout

답변:



10

잘라 내기 테이블 저장 프로 시저와 같은 개체에 대한 설정 권한은 다음을 사용하여 수행 할 수 있습니다.

GRANT EXECUTE ON <schema>.<object> to <user>;

그러나 로그인 수준과 사용자 수준 모두에서 보안 권한을 부여 할 수도 있습니다. 액세스가 필요한 개체 (예 : 실행)에 필요한 권한 만 결정하고 부여하려고합니다. EXECUTE AS모든 기본 개체 (예 : 테이블)에 필요한 모든 권한을 부여하지 않고도 코드를 실행하는 데 필요한 권한을 다른 사용자로 가장 할 수 있는 기능 사용을 고려하십시오 . EXECUTE AS저장 프로 시저, 함수, 트리거 등에 추가 할 수 있습니다.

저장 프로 시저 내에서 다음과 같이 코드에 추가하십시오.

CREATE PROCEDURE dbo.MyProcedure WITH EXECUTE AS OWNER

이 경우 호출중인 모듈의 소유자를 가장합니다. 또한 SELF, 또는 사용자가 모듈을 만들거나 변경하거나 OR ... imperonate CALLER을 가장하여 현재 사용자의 권한을 취할 수있는 모듈 인 OR ... 가장 권한을 가진 OWNER를 가장 할 수 있습니다. 프로 시저 소유자가 OR ... 가장 '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는 테이블을 수정하거나이 테이블의 데이터를 읽거나 수정할 수있는 권한이 전혀 없습니다.

이 절차의 맥락에서 코딩 된이 특정 작업을 완료하는 데 필요한 권한 만 갖습니다.

이러한 권한을 영구적으로 할당하지 않고 높은 보안 권한이 필요한 작업을 수행 할 수있는 저장 프로 시저를 만드는이 방법은 매우 유용합니다.


4
이것은 당신이 SO에 게시 한 것과 같은 대답 이며 , 가독성을 위해 형식화해야했습니다.
Aaron Bertrand

5

여기에 이미지 설명을 입력하십시오

데이터베이스 로그인-> 보안으로 이동을 선택하고 앞의 이미지에서와 같이 검색 버튼을 클릭하십시오. 검색 버튼을 클릭하면 객체 유형을 추가하는 다음과 같은 창이 나타납니다.

객체 유형 버튼을 클릭하면 다양한 객체가 포함 된 "객체 유형 선택"창이 나타납니다. 이제 보시면 스토어드 프로 시저가 오브젝트 유형 영역에 나열됩니다. 이제 권한을 제공 할 특정 저장 프로 시저를 선택하겠습니다.


첫째, 당신이 대답했을 때 그 질문은 5 살이 넘었습니다. OP가 GUI를 사용하지 않고 스크립트에 포함시킬 수있는 솔루션을 구체적으로 요청한 것을 제외하고는 괜찮을 것입니다. 귀하의 답변으로는 해결되지 않습니다.
에릭 브란트
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.