일반적으로 저장 프로 시저를 만들 때 다음을 정렬 템플릿으로 사용합니다.
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, 또는 사용자가 모듈을 만들거나 변경하거나 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
는 테이블을 수정하거나이 테이블의 데이터를 읽거나 수정할 수있는 권한이 전혀 없습니다.
이 절차의 맥락에서 코딩 된이 특정 작업을 완료하는 데 필요한 권한 만 갖습니다.
이러한 권한을 영구적으로 할당하지 않고 높은 보안 권한이 필요한 작업을 수행 할 수있는 저장 프로 시저를 만드는이 방법은 매우 유용합니다.