서버 수준 역할

적용 대상: SQL Server(지원되는 모든 버전) Azure SQL Managed Instance Analytics Platform System(PDW)

SQL Server 에서는 서버에 대한 사용 권한을 쉽게 관리할 수 있도록 서버 수준 역할을 제공합니다. 서버 역할은 다른 보안 주체를 그룹화하는 보안 주체입니다. 서버 수준 역할은 서버 측 사용 권한 범위에 속합니다. 역할 은 Windows 운영 체제의 그룹 과 같습니다.

SQL Server 2019 및 이전 버전에서는 9개의 고정 서버 역할을 제공했습니다. 고정 서버 역할에 부여된 권한( 공용 제외)은 변경할 수 없습니다. SQL Server 2012(11.x)부터는 사용자 정의 서버 역할을 만들어 여기에 서버 수준 사용 권한을 추가할 수 있습니다. SQL Server 2022(16.x)에는 최소 권한 원칙을 염두에 두고 특별히 설계된 10개의 추가 서버 역할이 함께 제공되며, 접두 ##MS_ 사와 접미사를 ## 사용하여 다른 일반 사용자 생성 보안 주체 및 사용자 지정 서버 역할과 구분합니다. 이러한 새 역할에는 서버 범위에 적용되는 권한이 포함되어 있지만 개별 데이터베이스에 상속할 수도 있습니다( ##MS_LoginManager## 서버 역할 제외).

SQL Server 온-프레미스와 마찬가지로 서버 권한은 계층적으로 구성됩니다. 이러한 서버 수준 역할이 보유한 권한은 데이터베이스 권한으로 전파될 수 있습니다. 사용 권한이 데이터베이스 수준에서 효과적으로 유용하려면 로그인이 모든 데이터베이스에 CONNECT 권한을 부여하거나 개별 데이터베이스에 사용자 계정을 갖는 서버 수준 역할 ##MS_DatabaseConnector##(SQL Server 2022(16.x)부터)의 멤버여야 합니다. 데이터베이스에도 master 적용됩니다. 다음 예제를 고려합니다. 서버 수준 역할 ##MS_ServerStateReader## 에는 VIEW SERVER STATE 권한이 있습니다. 이 역할의 멤버인 로그인에는 데이터베이스 및 에 사용자 계정이 있습니다 masterWideWorldImporters. 그러면 이 사용자에게 상속을 통해 두 데이터베이스의 VIEW DATABASE STATE 권한이 부여됩니다.

서버 수준 보안 주체(SQL Server 로그인, Windows 계정 및 Windows 그룹)를 서버 수준 역할에 추가할 수 있습니다. 고정 서버 역할의 각 멤버는 같은 역할에 다른 로그인을 추가할 수 있습니다. 사용자 정의 서버 역할의 멤버는 역할에 다른 서버 주체를 추가할 수 없습니다.

고정 서버 수준 역할

참고

SQL Server 2022(16.x) 이전에 도입된 이러한 서버 수준 역할은 Azure SQL Database 또는 Azure Synapse Analytics에서 사용할 수 없습니다. SQL Server 2022(16.x)에 도입된 서버 수준 역할과 동일한 권한 관리를 위한 특별한 Azure SQL 데이터베이스 서버 역할이 있습니다. SQL Database 대한 자세한 내용은 데이터베이스 액세스 제어 및 부여를 참조하세요.

다음 표에서는 고정 서버 수준 역할과 해당 기능을 보여 줍니다.

고정 서버 수준 역할 Description
sysadmin sysadmin 고정 서버 역할의 멤버는 서버에서 모든 작업을 수행할 수 있습니다.
serveradmin serveradmin 고정 서버 역할의 멤버는 서버 차원의 구성 옵션을 변경하고 서버를 종료할 수 있습니다.
securityadmin securityadmin 고정 서버 역할의 멤버는 로그인 및 해당 속성을 관리합니다. 서버 수준 사용 권한을 GRANT, DENYREVOKE할 수 있습니다. 데이터베이스에 액세스할 수 있는 데이터베이스 수준 사용 권한도 GRANT, DENYREVOKE할 수 있습니다. 또한 이 역할의 멤버는 SQL Server 의 로그인 암호를 다시 설정할 수 있습니다.

중요: 보안 관리자는 데이터베이스 엔진에 대한 액세스 권한을 부여하고 사용자 권한을 구성할 수 있으므로 대부분의 서버 사용 권한을 할당할 수 있습니다. securityadmin 역할은 sysadmin 역할과 동일하게 처리되어야 합니다. 또는 SQL Server 2022(16.x)부터 새 고정 서버 역할 ##MS_LoginManager##을 사용하는 것이 좋습니다.
processadmin processadmin 고정 서버 역할의 멤버는 SQL Server의 인스턴스에서 실행 중인 프로세스를 종료할 수 있습니다.
setupadmin setupadmin 고정 서버 역할의 멤버는 Transact-SQL 문을 사용하여 연결된 서버를 추가하고 제거할 수 있습니다. (Management Studio를 사용할 때 sysadmin 멤버 자격이 필요합니다.)
bulkadmin bulkadmin 고정 서버 역할의 멤버는 BULK INSERT 문을 실행할 수 있습니다.

bulkadmin 역할 또는 BULK OPERATIONS 관리 권한은 SQL Server on Linux 지원되지 않습니다. SQL Server on Linux의 경우 sysadmin만 대량 삽입을 수행할 수 있습니다.
diskadmin diskadmin 고정 서버 역할은 디스크 파일을 관리하는 데 사용됩니다.
dbcreator dbcreator 고정 서버 역할의 멤버는 데이터베이스를 생성, 변경, 삭제, 복원할 수 있습니다.
public 모든 SQL Server 로그인은 public 서버 역할에 속합니다. 서버 주체가 보안 개체에 대한 특정 권한을 부여하거나 거부하지 않은 경우 사용자는 해당 개체에 대해 공개 에 부여된 권한을 상속합니다. 모든 사용자가 개체를 사용할 수 있도록 하려는 경우에만 개체에 public 권한을 할당해야 합니다. 공용의 멤버 자격은 변경할 수 없습니다.

참고:public은 다른 역할과 다른 방식으로 구현되며 public 고정 서버 역할에서 사용 권한이 부여, 거부 또는 취소될 수 있습니다.

중요

다음 서버 역할에서 제공하는 대부분의 권한은 processadmin, serveradmin, setupadmindiskadmin같은 Azure Synapse Analytics에 적용되지 않습니다.

2022년 SQL Server 도입된 서버 수준 역할 수정

다음 표에서는 SQL Server 2022(16.x) 및 해당 기능에 도입된 추가 고정 서버 수준 역할을 보여 줍니다.

참고

이러한 서버 수준 권한은 Azure SQL Managed Instance 또는 Azure Synapse Analytics에 사용할 수 없습니다. ##MS_PerformanceDefinitionReader##, ##MS_ServerPerformanceStateReader##, ##MS_ServerSecurityStateReader##은 SQL Server 2022(16.x)에 도입되었으며 Azure SQL Database에서는 사용할 수 없습니다.

고정 서버 수준 역할 Description
##MS_DatabaseConnector## ##MS_DatabaseConnector## 고정 서버 역할의 멤버는 연결할 데이터베이스의 사용자 계정이 없어도 모든 데이터베이스에 연결할 수 있습니다.

특정 데이터베이스에 대한 CONNECT 권한을 거부하려면 사용자는 데이터베이스에서 이 로그인을 위한 일치하는 사용자 계정을 만든 다음 데이터베이스 사용자에 대한 CONNECT 권한을 DENY할 수 있습니다. 이 DENY 권한은 이 역할에서 비롯된 GRANT CONNECT 권한을 무효화합니다.
##MS_LoginManager## ##MS_LoginManager## 고정 서버 역할의 멤버는 로그인을 만들고 삭제하고 수정할 수 있습니다. 이전 고정 서버 역할 securityadmin과 달리 이 역할은 멤버의 GRANT 권한을 허용하지 않습니다. 최소 권한 원칙을 준수하는 데 도움이 되는 더 제한된 역할입니다.
##MS_DatabaseManager## ##MS_DatabaseManager## 고정 서버 역할의 멤버는 데이터베이스를 만들고 삭제할 수 있습니다. 데이터베이스를 만드는 ##MS_DatabaseManager## 역할의 멤버는 해당 데이터베이스 소유자가 되어 사용자가 dbo 사용자로 데이터베이스에 연결할 수 있도록 허용합니다. dbo 사용자는 데이터베이스의 모든 데이터베이스 권한을 갖습니다. ##MS_DatabaseManager## 역할의 멤버는 소유하지 않은 데이터베이스에 액세스하는 권한이 없을 수도 있습니다.
##MS_ServerStateManager## ##MS_ServerStateManager## 고정 서버 역할의 멤버는 ##MS_ServerStateReader## 역할과 동일한 권한을 갖습니다. 또한 ALTER SERVER STATE 권한을 보유하므로 , , DBCC FREESYSTEMCACHE ('ALL')등의 DBCC FREEPROCCACHE여러 관리 작업에 액세스할 수 있습니다.DBCC SQLPERF()
##MS_ServerStateReader## ##MS_ServerStateReader## 고정 서버 역할의 멤버는 VIEW SERVER STATE에서 다루는 모든 DMV(동적 관리 뷰) 및 함수를 읽을 수 있으며, 이 역할의 멤버에 사용자 계정이 있는 모든 데이터베이스에 대해 각각 VIEW DATABASE STATE 권한이 있습니다.
##MS_ServerPerformanceStateReader ## ##MS_ServerPerformanceStateReader## 고정 서버 역할의 멤버는 VIEW SERVER PERFORMANCE STATE에서 다루는 모든 DMV(동적 관리 뷰) 및 함수를 읽을 수 있으며, 이 역할의 멤버에 사용자 계정이 있는 모든 데이터베이스에 대해 각각 VIEW DATABASE PERFORMANCE STATE 권한이 있습니다. 이는 최소 권한 원칙을 준수하는 데 도움이 되는 ##MS_ServerStateReader## 서버 역할에 대한 액세스 권한 하위 집합입니다.
##MS_ServerSecurityStateReader ## ##MS_ServerSecurityStateReader## 고정 서버 역할의 멤버는 VIEW SERVER SECURITY STATE에서 다루는 모든 DMV(동적 관리 뷰) 및 함수를 읽을 수 있으며, 이 역할의 멤버에 사용자 계정이 있는 데이터베이스에 대해 각각 VIEW DATABASE SECURITY STATE 권한이 있습니다. 이는 ##MS_ServerStateReader## 서버 역할이 액세스할 수 있는 항목의 작은 하위 집합으로, 최소 권한 원칙을 준수하는 데 도움이 됩니다.
##MS_DefinitionReader## ##MS_DefinitionReader## 고정 서버 역할의 멤버는 VIEW ANY DEFINITION에서 다루는 모든 카탈로그 뷰를 읽을 수 있으며, 이 역할의 멤버에 사용자 계정이 있는 데이터베이스에 대해 각각 VIEW DEFINITION 권한이 있습니다.
##MS_PerformanceDefinitionReader ## ##MS_PerformanceDefinitionReader## 고정 서버 역할의 멤버는 VIEW ANY PERFORMANCE DEFINITION에서 다루는 모든 카탈로그 뷰를 읽을 수 있으며, 이 역할의 멤버에 사용자 계정이 있는 데이터베이스에 대해 각각 VIEW PERFORMANCE DEFINITION 권한이 있습니다. # #MS_DefinitionReader## 서버 역할에 액세스할 수 있는 하위 집합입니다.
##MS_SecurityDefinitionReader## ##MS_SecurityDefinitionReader## 고정 서버 역할의 멤버는 VIEW ANY SECURITY DEFINITION이 다루는 모든 카탈로그 보기를 읽을 수 있으며, 각각 이 역할의 멤버가 사용자 계정을 가지고 있는 모든 데이터베이스에서 VIEW SECURITY DEFINITION 권한을 갖습니다. 이는 최소 권한 원칙을 준수하는 데 도움이 되는 ##MS_DefinitionReader## 서버 역할에 대한 액세스 권한 작은 하위 집합입니다.

고정 서버 역할에 대한 사용 권한

각 고정 서버 역할에는 관련된 특정 사용 권한이 있습니다.

2022년 SQL Server 새 고정 서버 역할의 권한

각 고정 서버 수준 역할에는 관련된 특정 사용 권한이 있습니다. 다음 표는 서버 수준 역할에 할당된 권한을 보여 줍니다. 또한 사용자가 개별 데이터베이스에 연결할 수 있는 한 상속되는 데이터베이스 수준 권한을 보여 줍니다.

고정 서버 수준 역할 서버 수준 권한 데이터베이스 수준 권한
##MS_DatabaseConnector## CONNECT ANY DATABASE CONNECT
##MS_LoginManager## CREATE LOGIN
ALTER ANY LOGIN
해당 없음
##MS_DatabaseManager## CREATE ANY DATABASE
ALTER ANY DATABASE
ALTER
##MS_ServerStateManager## ALTER SERVER STATE
VIEW SERVER STATE
서버 성능 상태 보기
서버 보안 상태 보기
VIEW DATABASE STATE
데이터베이스 성능 상태 보기
데이터베이스 보안 상태 보기
##MS_ServerStateReader## VIEW SERVER STATE
서버 성능 상태 보기
서버 보안 상태 보기
VIEW DATABASE STATE
데이터베이스 성능 상태 보기
데이터베이스 보안 상태 보기
##MS_ServerPerformanceStateReader ## 서버 성능 상태 보기 데이터베이스 성능 상태 보기
##MS_ServerSecurityStateReader ## 서버 보안 상태 보기 데이터베이스 보안 상태 보기
##MS_DefinitionReader## VIEW ANY DATABASE
VIEW ANY DEFINITION
성능 정의 보기
모든 보안 정의 보기
VIEW DEFINITION
성능 정의 보기
보안 정의 보기
##MS_PerformanceDefinitionReader ## 성능 정의 보기 성능 정의 보기
##MS_SecurityDefinitionReader## 모든 보안 정의 보기 보안 정의 보기

SQL Server 2019 및 이전 버전의 서버 역할 권한

다음 그래픽은 레거시 서버 역할에 할당된 권한(SQL Server 2019 및 이전 버전)을 보여 줍니다.
fixed_server_role_permissions

중요

CONTROL SERVER 권한은 sysadmin 고정 서버 역할과 유사하지만 동일하지는 않습니다. 권한이 역할 멤버 자격을 의미하지 않으며 역할 멤버 자격이 있다고 해서 사용 권한이 부여되는 것도 아닙니다. (예: CONTROL SERVERsysadmin 고정 서버 역할의 멤버 자격을 의미하지 않습니다.) 그러나 역할과 동등한 권한 간에 가장할 수 있는 경우도 있습니다. 대부분의 DBCC 명령 및 많은 시스템 절차를 수행하려면 sysadmin 고정 서버 역할의 멤버 자격이 필요합니다. sysadmin 멤버 자격이 필요한 171개의 시스템 저장 프로시저 목록의 경우 Andreas Wolter가 작성한 CONTROL SERVER vs. sysadmin/sa: permissions, system procedures, DBCC, automatic schema creation and privilege escalation - caveats(제어 서버 및 sysadmin/sa: 사용 권한, 시스템 프로시저, DBCC, 자동 스키마 생성 및 권한 에스컬레이션 - 주의할 사항) 블로그 게시물을 참조하세요.

서버 수준 권한

사용자 정의 서버 역할에는 서버 수준 사용 권한만 추가할 수 있습니다. 서버 수준 사용 권한을 나열하려면 다음 문을 실행하세요. 서버 수준 사용 권한은 다음과 같습니다.

SELECT * FROM sys.fn_builtin_permissions('SERVER') ORDER BY permission_name;  

권한에 대한 자세한 내용은 권한(데이터베이스 엔진)sys.fn_builtin_permissions(Transact-SQL)을 참조하세요.

서버 수준 역할 작업

다음 표에서는 서버 수준 역할을 통해 사용할 수 있는 명령, 뷰 및 함수를 보여 줍니다.

기능 Type Description
sp_helpsrvrole(Transact-SQL) 메타데이터 서버 수준 역할의 목록을 반환합니다.
sp_helpsrvrolemember(Transact-SQL) 메타데이터 서버 수준 역할의 멤버에 대한 정보를 반환합니다.
sp_srvrolepermission(Transact-SQL) 메타데이터 서버 수준 역할의 사용 권한을 표시합니다.
IS_SRVROLEMEMBER(Transact-SQL) 메타데이터 SQL Server 로그인이 지정된 서버 수준 역할의 멤버인지 여부를 나타냅니다.
sys.server_role_members(Transact-SQL) 메타데이터 각 서버 수준 역할의 각 멤버에 대해 행을 반환합니다.
CREATE SERVER ROLE(Transact-SQL) 명령 사용자 정의 서버 역할을 만듭니다.
ALTER SERVER ROLE(Transact-SQL) 명령 서버 역할의 멤버 자격을 변경하거나 사용자 정의 서버 역할의 이름을 변경합니다.
DROP SERVER ROLE(Transact-SQL) 명령 사용자 정의 서버 역할을 제거합니다.
sp_addsrvrolemember(Transact-SQL) 명령 서버 수준 역할의 멤버로서 로그인을 추가합니다. 사용되지 않습니다. 대신 ALTER SERVER ROLE 을 사용하세요.
sp_dropsrvrolemember(Transact-SQL) 명령 서버 수준 역할에서 SQL Server 로그인이나 Windows 사용자 또는 그룹을 제거합니다. 사용되지 않습니다. 대신 ALTER SERVER ROLE 을 사용하세요.

참고 항목

데이터베이스 수준 역할
보안 카탈로그 뷰(Transact-SQL)
보안 함수(Transact-SQL)
SQL Server 보안 설정
GRANT 서버 보안 주체 사용 권한(Transact-SQL)
REVOKE 서버 보안 주체 사용 권한(Transact-SQL)
DENY 서버 보안 주체 사용 권한(Transact-SQL)
서버 역할 만들기
권한 관리를 위한 Azure SQL Database 서버 역할