GRANT 시스템 개체 권한(Transact-SQL)

적용 대상:SQL ServerAzure SQL Managed Instance

시스템 저장 프로시저, 확장 저장 프로시저, 함수 및 뷰와 같은 시스템 개체에 대한 권한을 부여합니다.

Transact-SQL 구문 표기 규칙

Syntax

GRANT { SELECT | EXECUTE } ON [ sys. ] system_object TO principal
[ ; ]

참고 항목

SQL Server 2014(12.x) 및 이전 버전에 대한 Transact-SQL 구문을 보려면 이전 버전 설명서를 참조 하세요.

인수

[ sys. ]

sys 한정자는 카탈로그 뷰 및 동적 관리 뷰를 참조하는 경우에만 필요합니다.

system_object

사용 권한을 부여할 개체를 지정합니다.

principal

사용 권한을 부여할 보안 주체를 지정합니다.

설명

이 문을 사용하여 SQL Server에서 설치한 특정 저장 프로시저, 확장 저장 프로시저, 테이블 반환 함수, 스칼라 함수, 뷰, 카탈로그 뷰, 호환성 뷰, INFORMATION_SCHEMA 뷰, 동적 관리 뷰 및 시스템 테이블에 대한 권한을 부여할 수 있습니다. 이러한 각 시스템 개체는 서버의 리소스 데이터베이스(mssqlsystemresource)에 고유한 레코드로 존재합니다. 리소스 데이터베이스는 읽기 전용입니다. 개체에 대한 링크는 모든 데이터베이스의 sys 스키마에 레코드로 표시됩니다. 시스템 개체를 실행하거나 선택할 수 있는 사용 권한을 부여, 거부 및 취소할 수 있습니다.

개체를 실행하거나 선택할 수 있는 권한을 부여해도 개체를 사용하는 데 필요한 모든 권한이 반드시 전달되는 것은 아닙니다. 대부분의 개체는 추가 권한이 필요한 작업을 수행합니다. 예를 들어 권한이 부여된 EXECUTE 사용자는 sysadmin 고정 서버 역할의 멤버인 경우가 아니면 연결된 서버를 만들 수 sp_addlinkedserver 없습니다.

기본 이름 확인은 정규화되지 않은 프로시저 이름을 리소스 데이터베이스로 확인합니다. 따라서 sys 한정자는 카탈로그 뷰 및 동적 관리 뷰를 지정하는 경우에만 필요합니다.

트리거 및 시스템 개체 열에 대한 사용 권한 부여는 지원되지 않습니다.

시스템 개체에 대한 사용 권한은 SQL Server를 업그레이드하는 동안 유지됩니다.

사용 권한을 부여하려면 데이터베이스에 master 있어야 하며 사용 권한을 부여하는 보안 주체는 데이터베이스의 master 사용자여야 합니다. 즉, 서버 수준 사용 권한인 경우 서버 보안 주체에 부여할 수 없으며 데이터베이스 보안 주체만 부여할 수 있습니다.

시스템 개체는 sys.system_objects 카탈로그 뷰에 표시됩니다. 시스템 개체에 대한 사용 권한은 데이터베이스의 sys.database_permissions 카탈로그 뷰에 master 표시됩니다.

다음 쿼리는 시스템 개체의 사용 권한에 대한 정보를 반환합니다.

SELECT *
FROM master.sys.database_permissions AS dp
INNER JOIN sys.system_objects AS so
    ON dp.major_id = so.object_id
WHERE dp.class = 1 AND so.parent_object_id = 0;
GO

사용 권한

CONTROL SERVER 권한이 필요합니다.

A. 보기에 대한 SELECT 권한 부여

다음 예에서는 SQL Server 로그인이 나열된 뷰를 선택할 수 있는 SQL Server 로그인 Sylvester1 권한을 부여합니다. 그런 다음, 사용자가 소유하지 않은 SQL Server 로그인의 메타데이터를 보는 데 필요한 추가 권한을 부여하는 예제입니다.

USE master;
GO
GRANT SELECT ON sys.sql_logins TO Sylvester1;
GRANT VIEW SERVER STATE to Sylvester1;
GO

B. 확장 저장 프로시저에 EXECUTE 권한 부여

다음 예에서는 EXECUTE에 대한 xp_readmail 권한을 Sylvester1에 부여합니다.

USE master;
GO
GRANT EXECUTE ON xp_readmail TO Sylvester1;
GO