반응형
데이터베이스에 저장된 모든 프로시저에 대해 사용자에게 실행 권한을 부여하시겠습니까?
이전 데이터베이스에서 스크립트를 생성하고, 새 데이터베이스를 만들고, 이전 데이터베이스에서 모든 데이터를 가져왔습니다.그러나 지금까지는 저장 프로시저를 실행할 권한이 있는 사용자는 없습니다.내가 쓸 수 있다는 거 알아
GRANT EXECUTE ON [storedProcName] TO [userName]
단, 몇 가지 절차만 있다면 100개 정도 있는데, 모든 절차에 대해 특정 사용자에 대해 실행 권한을 부여하는 가장 쉬운 방법은 무엇일까요?
역할을 생성하여 이 역할을 사용자에게 추가한 후 이 역할에 대해 한 번에 모든 루틴에 실행을 부여할 수 있습니다.
CREATE ROLE <abc>
GRANT EXECUTE TO <abc>
편집
이것은 SQL Server 2005에서 동작합니다.이 기능의 하위 호환성에 대해서는 잘 모르겠습니다.2005년 이후로는 문제가 없을 것입니다.
문제를 지나치게 복잡하게 만들지 않고 선택한 데이터베이스에 EXECUTE를 부여하려면 다음 절차를 따릅니다.
USE [DB]
GRANT EXEC TO [User_Name];
이는 스키마에 새로운 스토어드 프로시저를 추가할 때 사용자가 새로운 스토어드 프로시저에서 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
아래 코드를 사용하여 적절한 데이터베이스 이름과 사용자 이름을 변경한 후 해당 출력을 가져와 SSMS에서 실행합니다.위 SQL 2005의 경우
USE <database_name>
select 'GRANT EXECUTE ON ['+name+'] TO [userName] '
from sys.objects
where type ='P'
and is_ms_shipped = 0
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
언급URL : https://stackoverflow.com/questions/5428406/grant-execute-permission-for-a-user-on-all-stored-procedures-in-database
반응형
'programing' 카테고리의 다른 글
Swift 열거형 카운트를 얻으려면 어떻게 해야 합니까? (0) | 2023.04.16 |
---|---|
신속한 언어로 구조화 vs 클래스 (0) | 2023.04.16 |
문자열 단어를 반복하려면 어떻게 해야 하나요? (0) | 2023.04.16 |
std::목록을 반복하는 동안 목록에서 요소를 제거할 수 있습니까? (0) | 2023.04.16 |
이중 괄호 또는 단일 괄호, 괄호, 컬리 괄호 사용 방법 (0) | 2023.04.16 |