데이터베이스의 모든 저장 프로 시저에 대한 실행 권한을 사용자에게 부여 하시겠습니까?


104

이전 데이터베이스에서 스크립트를 생성하고 새 데이터베이스를 만들고 이전 데이터베이스에서 모든 데이터를 가져 왔습니다. 그러나 지금까지는 저장 프로 시저에 대한 실행 권한이있는 사용자가 없습니다. 내가 사용할 수 있다는 걸 알아

GRANT EXECUTE ON [storedProcName] TO [userName] 

그러나 몇 가지 절차에 불과한 경우 약 100 개의 절차가 있으므로 특정 사용자에게 모든 절차에 대해 실행 액세스 권한을 부여하는 가장 쉬운 방법은 무엇입니까?

미리 감사드립니다.

답변:


115

역할을 생성하여 사용자에게이 역할을 추가하면 한 번에 모든 루틴에 대한 실행 권한을이 역할에 부여 할 수 있습니다.

CREATE ROLE <abc>
GRANT EXECUTE TO <abc>

편집
이것은 SQL Server 2005에서 작동합니다.이 기능의 이전 버전과의 호환성에 대해 잘 모르겠습니다. 2005 년 이후의 모든 것이 괜찮을 것입니다.


방금 SQL Server 2008 Standard (amazon RDS)에서 시도해 보았는데 매력처럼 작동했습니다.
datagod

예를 들어 주시겠습니까? 내가 사용자 SPExecuter 모든 SP의 실행 권한 부여해야 말할 수
열린 우리당 Abramson이

4
필요한 유일한 다른 명령문은 사용자를 역할에 추가하는 줄입니다. 다음과 같이 ALTER ROLE [abc] ADD MEMBER [user_name]
dhochee

GRANT EXEC TO 공개
사이먼 휴즈

27
실제로 역할을 만들 필요는 없습니다. 사용자에게 직접 적용 할 수 있습니다 (예 : GRANT EXECUTE TO userName). 나는 이것이 OP의 질문에 충분하다고 생각합니다.
Chris Peacock

25

문제를 지나치게 복잡하게하지 않고 선택한 데이터베이스에 EXECUTE를 부여하려면 다음을 수행하십시오.

USE [DB]
GRANT EXEC TO [User_Name];

1
나를 위해 일했으며 아마도 저장된 각 프로 시저의 이름을 지정하는 스크립트가 아니라 향후 모든 저장 프로 시저를 다룰 것입니다.
Ken Forslund

19

이는 스키마에 새 저장 프로 시저를 추가 할 때 사용자가 새 저장 프로 시저에 대해 grant execute를 호출하지 않고도 실행할 수 있음을 의미하는 솔루션입니다.

IF  EXISTS (SELECT * FROM sys.database_principals WHERE name = N'asp_net')
DROP USER asp_net
GO

IF  EXISTS (SELECT * FROM sys.database_principals 
WHERE name = N'db_execproc' AND type = 'R')
DROP ROLE [db_execproc]
GO

--Create a database role....
CREATE ROLE [db_execproc] AUTHORIZATION [dbo]
GO

--...with EXECUTE permission at the schema level...
GRANT EXECUTE ON SCHEMA::dbo TO db_execproc;
GO

--http://www.patrickkeisler.com/2012/10/grant-execute-permission-on-all-stored.html
--Any stored procedures that are created in the dbo schema can be 
--executed by users who are members of the db_execproc database role

--...add a user e.g. for the NETWORK SERVICE login that asp.net uses
CREATE USER asp_net 
FOR LOGIN [NT AUTHORITY\NETWORK SERVICE] 
WITH DEFAULT_SCHEMA=[dbo]
GO

--...and add them to the roles you need
EXEC sp_addrolemember N'db_execproc', 'asp_net';
EXEC sp_addrolemember N'db_datareader', 'asp_net';
EXEC sp_addrolemember N'db_datawriter', 'asp_net';
GO

참조 : 모든 저장 프로 시저에 대한 실행 권한 부여


6

아래 코드를 사용하고 적절한 데이터베이스 이름과 사용자 이름을 변경 한 다음 해당 출력을 가져와 SSMS에서 실행하십시오. 위의 SQL 2005 용

USE <database_name> 
select 'GRANT EXECUTE ON ['+name+'] TO [userName]  '  
from sys.objects  
where type ='P' 
and is_ms_shipped = 0  

1
CLR 저장 프로 시저를 포함하려면 'PC'유형도 포함해야합니다.
Oleh Nechytailo

1
USE [DATABASE]

DECLARE @USERNAME VARCHAR(500)

DECLARE @STRSQL NVARCHAR(MAX)

SET @USERNAME='[USERNAME] '
SET @STRSQL=''

select @STRSQL+=CHAR(13)+'GRANT EXECUTE ON ['+ s.name+'].['+obj.name+'] TO'+@USERNAME+';'
from
    sys.all_objects as obj
inner join
    sys.schemas s ON obj.schema_id = s.schema_id
where obj.type in ('P','V','FK')
AND s.NAME NOT IN ('SYS','INFORMATION_SCHEMA')


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