데이터베이스 수준 역할

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System(PDW)

데이터베이스의 사용 권한을 쉽게 관리하기 위해 SQL Server는 다른 보안 주체를 그룹화한 보안 주체인 여러 역할을 제공합니다. Microsoft Windows 운영 체제의 그룹과 같습니다. 데이터베이스 수준 역할은 사용 권한 범위에서 데이터베이스 전체입니다.

데이터베이스 역할에 사용자를 추가하고 제거하려면 ADD MEMBER ALTER ROLE DROP MEMBER 문의 옵션을 사용합니다. 분석 플랫폼 시스템(PDW) 및 Azure Synapse Analytics는 사용을 지원하지 ALTER ROLE않습니다. 대신 이전 sp_addrolemembersp_droprolemember 프로시저를 사용합니다.

데이터베이스 수준 역할 의 두 가지 유형은 데이터베이스에 미리 정의된 고정 데이터베이스 역할만들 수 있는 사용자 정의 데이터베이스 역할 입니다.

고정 데이터베이스 역할은 데이터베이스 수준에서 정의되며 각 데이터베이스에 존재합니다. db_owner 데이터베이스 역할의 멤버는 고정 데이터베이스 역할 멤버 자격을 관리할 수 있습니다. msdb 데이터베이스에는 몇 가지 특수한 용도의 데이터베이스 역할도 있습니다.

데이터베이스 계정 및 기타 SQL Server 역할을 데이터베이스 수준 역할에 추가할 수 있습니다.

사용자 정의 데이터베이스 역할을 고정 역할의 멤버로 추가하지 마세요. 이렇게 하면 의도하지 않은 권한 상승이 발생할 수 있습니다.

사용자 정의 데이터베이스 역할에 부여된 권한은 GRANT, DENYREVOKE 문을 사용하여 사용자 지정할 수 있습니다. 자세한 내용은 사용 권한(데이터베이스 엔진)을 참조하세요.

모든 사용 권한 목록은 데이터베이스 엔진 사용 권한 포스터를 참조하세요. 서버 수준 권한은 데이터베이스 역할에 부여할 수 없습니다. 로그인 및 기타 서버 수준 보안 주체(예: 서버 역할)는 데이터베이스 역할에 추가할 수 없습니다. SQL Server의 서버 수준 보안의 경우 서버 역할을 대신 사용합니다. Azure SQL Database 및 Azure Synapse Analytics의 역할을 통해 서버 수준 권한을 부여할 수 없습니다.

고정 데이터베이스 역할

다음 표에서는 고정 데이터베이스 역할과 기능을 보여 줍니다. 이러한 역할은 모든 데이터베이스에 존재합니다. 공용 데이터베이스 역할을 제외하고 고정 데이터베이스 역할에 할당된 권한은 변경할 수 없습니다.

고정 데이터베이스 역할 이름 설명
db_owner db_owner 고정 데이터베이스 역할의 멤버는 데이터베이스에서 모든 구성 및 기본 테넌트 작업을 수행할 수 있으며 SQL Server의 데이터베이스도 drop 수행할 수 있습니다. (SQL Database 및 Azure Synapse에서 일부 기본 테넌트 활동에는 서버 수준 권한이 필요하며 db_owners 수행할 수 없습니다.)
db_securityadmin db_securityadmin 고정 데이터베이스 역할의 멤버는 사용자 지정 역할에 대해서만 역할 멤버 자격을 수정하고 권한을 관리할 수 있습니다. 이 역할의 멤버는 자신의 권한을 높일 수도 있으므로, 이 멤버의 작업은 모니터링되어야 합니다.
db_accessadmin db_accessadmin 고정 데이터베이스 역할의 멤버는 Windows 로그인, Windows 그룹 및 SQL Server 로그인에 대한 데이터베이스에 대한 액세스를 추가하거나 제거할 수 있습니다.
db_backupoperator db_backupoperator 고정 데이터베이스 역할의 멤버는 데이터베이스를 백업할 수 있습니다.
db_ddladmin db_ddladmin 고정 데이터베이스 역할의 멤버는 데이터베이스에서 모든 DDL(데이터 정의 언어) 명령을 실행할 수 있습니다. 이 역할의 멤버는 높은 권한으로 실행될 수 있는 코드를 조작하여 잠재적으로 권한을 높일 수 있으며 해당 작업을 모니터링해야 합니다.
db_datawriter db_datawriter 고정 데이터베이스 역할의 멤버는 모든 사용자 테이블에서 데이터를 추가, 삭제 또는 변경할 수 있습니다. 대부분의 사용 사례에서 이 역할은 수정할 데이터를 읽을 수 있도록 db_datareader 멤버 자격과 결합됩니다.
db_datareader db_datareader 고정 데이터베이스 역할의 멤버는 모든 사용자 테이블 및 뷰에서 모든 데이터를 읽을 수 있습니다. 사용자 개체는 sysINFORMATION_SCHEMA 제외한 모든 스키마에 있을 수 있습니다.
db_denydatawriter db_denydatawriter 고정 데이터베이스 역할의 멤버는 데이터베이스 내의 사용자 테이블에 있는 데이터를 추가, 수정 또는 삭제할 수 없습니다.
db_denydatareader db_denydatareader 고정 데이터베이스 역할의 멤버는 데이터베이스 내의 사용자 테이블 및 뷰에서 데이터를 읽을 수 없습니다.

고정 데이터베이스 역할에 할당된 권한은 변경할 수 없습니다. 다음 그림에서는 고정 데이터베이스 역할에 할당된 사용 권한을 보여 줍니다.

fixed_database_role_permissions

SQL Database 및 Azure Synapse에 대한 특수 역할

이러한 데이터베이스 역할은 가상 master 데이터베이스에만 존재합니다. 해당 권한은 .에서 master수행된 작업으로 제한됩니다. 이러한 역할에는 master 데이터베이스 사용자만 추가할 수 있습니다. 이러한 역할에 로그인을 추가할 수는 없지만 로그인에 따라 사용자를 만든 다음 해당 사용자를 역할에 추가할 수 있습니다. 포함된 데이터베이스 사용자를 master 이러한 역할에 추가할 수도 있습니다. 그러나 dbmanager 역할에 master 추가된 포함된 데이터베이스 사용자는 새 데이터베이스를 만드는 데 사용할 수 없습니다.

역할 이름 설명
dbmanager 데이터베이스를 만들고 삭제할 수 있습니다. 데이터베이스를 만드는 dbmanager 역할의 멤버는 해당 데이터베이스 소유자가 되어 사용자가 dbo 사용자로 데이터베이스에 연결할 수 있도록 허용합니다. dbo 사용자는 해당 데이터베이스에서 모든 데이터베이스 사용 권한을 가집니다. dbmanager 역할의 멤버는 소유하지 않은 데이터베이스에 액세스할 권한이 반드시 필요하지는 않습니다.
db_exporter Azure Synapse Analytics 전용 SQL 풀(이전의 SQL DW)에만 적용됩니다.
db_exporter 고정 데이터베이스 역할의 멤버는 모든 데이터 내보내기 작업을 수행할 수 있습니다. 이 역할을 통해 부여된 권한은 CREATE TABLE, ALTER ANY SCHEMA, ALTER ANY EXTERNAL DATA SOURCE, ALTER ANY EXTERNAL FILE FORMAT입니다.
loginmanager 가상 master 데이터베이스에서 로그인을 만들고 삭제할 수 있습니다.

참고 항목

서버 수준 보안 주체 및 Microsoft Entra 관리자(구성된 경우)에는 역할의 멤버가 될 필요 없이 SQL Database 및 Azure Synapse Analytics의 모든 권한이 있습니다. 자세한 내용은 SQL Database 인증 및 권한 부여: 액세스 권한 부여를 참조 하세요.

일부 데이터베이스 역할은 Azure SQL 또는 Azure Synapse에 적용되지 않습니다.

  • 백업 및 복원 T-SQL 명령을 사용할 수 없으므로 Azure SQL Database(Azure SQL Managed Instance 아님) 및 Azure Synapse Analytics 서버리스 풀에는 db_backupoperator 적용할 수 없습니다.
  • db_datawriter 및 db_denydatawriter 외부 데이터를 읽기 때문에 Azure Synapse Analytics 서버리스에는 적용되지 않습니다.

msdb 역할

msdb 데이터베이스에는 다음 표에 표시된 특수 용도 역할이 포함되어 있습니다.

msdb 역할 이름 설명
db_ssisadmin

db_ssisoperator

db_ssisltduser
이러한 데이터베이스 역할의 멤버는 SSIS를 관리하고 사용할 수 있습니다. 이전 버전에서 업그레이드된 SQL Server 인스턴스에는 SSIS 대신 DTS(데이터 변환 서비스)를 사용하여 명명된 이전 버전의 역할이 포함될 수 있습니다. 자세한 내용은 Integration Services 역할(SSIS 서비스)을 참조하세요.
dc_admin

dc_operator

dc_proxy
이러한 데이터베이스 역할의 멤버는 데이터 수집기를 관리 및 사용할 수 있습니다. 자세한 내용은 Data Collection을 참조하세요.
PolicyAdministratorRole db_ PolicyAdministratorRole 데이터베이스 역할의 멤버는 정책 기반 관리 정책 및 조건의 모든 구성 및 유지 관리 작업을 수행할 수 있습니다. 자세한 내용은 관리 정책 기반 관리를 사용하여 서버 등록을 참조하세요.
ServerGroup관리istratorRole

ServerGroupReaderRole
이러한 데이터베이스 역할의 멤버는 등록된 서버 그룹을 관리하고 사용할 수 있습니다.
Dbm_monitor 첫 번째 데이터베이스가 데이터베이스 미러링 모니터에 등록될 때 msdb 데이터베이스에서 생성됩니다. dbm_monitor 역할에는 시스템 관리자가 사용자를 역할에 할당할 때까지 멤버가 없습니다.

Important

db_ssisadmin 역할 및 dc_admin 역할의 멤버는 자신의 권한을 sysadmin으로 승격할 수 있습니다. 이러한 권한 승격이 발생할 수 있는 것은 이러한 역할이 Integration Services 패키지를 수정할 수 있고 Integration Services 에서 SQL Server 에이전트의 sysadmin 보안 컨텍스트를 사용하여 SQL Server 패키지를 실행할 수 있기 때문입니다. 기본 테넌스 계획, 데이터 수집 집합 및 기타 Integration Services 패키지를 실행할 때 이러한 권한 상승을 방지하려면 제한된 권한의 프록시 계정을 사용하거나 db_ssisadmin 및 dc_admin 역할에 sysadmin 멤버만 추가하도록 패키지를 실행하는 SQL Server 에이전트 작업을 구성합니다.

데이터베이스 수준 역할 작업

다음 표에서는 데이터베이스 수준 역할 작업을 위한 명령, 보기 및 함수에 대해 설명합니다.

기능 Type 설명
sp_helpdbfixedrole(Transact-SQL) 메타데이터 고정 데이터베이스 역할의 목록을 반환합니다.
sp_dbfixedrolepermission(Transact-SQL) 메타데이터 고정 데이터베이스 역할의 사용 권한을 표시합니다.
sp_helprole(Transact-SQL) 메타데이터 현재 데이터베이스의 역할에 관한 정보를 반환합니다.
sp_helprolemember(Transact-SQL) 메타데이터 현재 데이터베이스에 있는 역할의 멤버에 관한 정보를 반환합니다.
sys.database_role_members(Transact-SQL) 메타데이터 각 데이터베이스 역할의 각 멤버에 대해 하나의 행을 반환합니다.
IS_MEMBER(Transact-SQL) 메타데이터 현재 사용자가 지정된 Microsoft Windows 그룹, Microsoft Entra 그룹 또는 Microsoft SQL Server 데이터베이스 역할의 구성원인지 여부를 나타냅니다.
CREATE ROLE(Transact-SQL) 명령 현재 데이터베이스에 새 데이터베이스 역할을 만듭니다.
ALTER ROLE(Transact-SQL) 명령 데이터베이스 역할의 이름 또는 멤버 자격을 변경합니다.
DROP ROLE(Transact-SQL) 명령 데이터베이스에서 역할을 제거합니다.
sp_addrole(Transact-SQL) 명령 현재 데이터베이스에 새 데이터베이스 역할을 만듭니다.
sp_droprole(Transact-SQL) 명령 현재 데이터베이스에서 데이터베이스 역할을 제거합니다.
sp_addrolemember(Transact-SQL) 명령 데이터베이스 사용자, 데이터베이스 역할, Windows 로그인 또는 Windows 그룹을 현재 데이터베이스의 데이터베이스 역할에 추가합니다. 대신 PDW(Analytics Platform System) 및 Azure Synapse를 제외한 모든 플랫폼을 사용해야 ALTER ROLE 합니다.
sp_droprolemember(Transact-SQL) 명령 현재 데이터베이스의 SQL Server 역할에서 보안 계정을 제거합니다. 대신 PDW(Analytics Platform System) 및 Azure Synapse를 제외한 모든 플랫폼을 사용해야 ALTER ROLE 합니다.
GRANT 사용 권한 역할에 권한을 추가합니다.
DENY 사용 권한 역할에 대한 사용 권한을 거부합니다.
REVOKE 사용 권한 이전에 부여하거나 거부한 사용 권한을 제거합니다.

public 데이터베이스 역할

모든 데이터베이스 사용자는 public 데이터베이스 역할에 속합니다. 사용자에게 보안 개체에 대한 특정 사용 권한이 부여되지 않았거나 거부된 경우 사용자는 해당 보안 개체에 대해 public으로 부여된 사용 권한을 상속 받습니다. 데이터베이스 사용자는 공용 역할에서 제거할 수 없습니다.

예제

이 섹션의 예에서는 데이터베이스 수준 역할을 사용하는 방법을 보여 줍니다.

A. 데이터베이스 수준 역할에 사용자 추가

다음 예제에서는 고정 데이터베이스 수준 역할에 db_datareader사용자 'Ben'을 추가합니다.

ALTER ROLE db_datareader
	ADD MEMBER Ben;  
GO

B. 데이터베이스 수준 역할의 멤버인 모든 데이터베이스 보안 주체 나열

다음 문은 모든 데이터베이스 역할의 모든 멤버를 반환합니다.

SELECT    roles.principal_id                            AS RolePrincipalID
    ,    roles.name                                    AS RolePrincipalName
    ,    database_role_members.member_principal_id    AS MemberPrincipalID
    ,    members.name                                AS MemberPrincipalName
FROM sys.database_role_members AS database_role_members  
JOIN sys.database_principals AS roles  
    ON database_role_members.role_principal_id = roles.principal_id  
JOIN sys.database_principals AS members  
    ON database_role_members.member_principal_id = members.principal_id;  
GO