데이터베이스 수준 역할
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW)
데이터베이스에서 사용 권한을 쉽게 관리하기 위해 SQL Server에서는 다른 보안 주체를 그룹화하는 보안 주체인 다양한 역할을 제공합니다. Windows 운영 체제의 그룹과 같습니다. 데이터베이스 수준 역할은 사용 권한 범위에서 데이터베이스 전체에 적용됩니다.
데이터베이스 역할에 사용자를 추가하고 제거하려면 ADD MEMBER
ALTER ROLE DROP MEMBER
문의 및 옵션을 사용합니다. 분석 플랫폼 시스템(PDW) 및 Azure Synapse Analytics는 ALTER ROLE
의 사용을 지원하지 않습니다. 대신 이전 sp_addrolemember 및 sp_droprolemember 프로시저를 사용합니다.
데이터베이스 수준 역할에는 두 가지 유형이 있습니다. 데이터베이스에 미리 정의된 고정 데이터베이스 역할과 만들 수 있는 사용자 정의 데이터베이스 역할입니다.
고정 데이터베이스 역할은 데이터베이스 수준에서 정의되며 각 데이터베이스에 있습니다. db_owner 데이터베이스 역할의 멤버는 고정 데이터베이스 역할 멤버 자격을 관리할 수 있습니다. msdb
데이터베이스에는 몇 가지 특수한 용도의 데이터베이스 역할도 있습니다.
데이터베이스 계정 및 기타 SQL Server 역할은 데이터베이스 수준 역할에 추가할 수 있습니다.
팁
사용자 정의 데이터베이스 역할을 고정 역할의 구성원로 추가하지 마세요. 이렇게 하면 의도하지 않은 권한 상승이 발생할 수 있습니다.
사용자 정의 데이터베이스 역할에 부여된 권한은 GRANT, DENY 및 REVOKE 문을 사용하여 사용자 지정할 수 있습니다. 자세한 내용은 사용 권한(데이터베이스 엔진)을 참조하세요.
모든 사용 권한 목록은 데이터베이스 엔진 사용 권한 포스터를 참조하세요. 데이터베이스 역할에는 서버 수준 권한을 부여할 수 없습니다. 로그인 및 기타 서버 수준 보안 주체(예: 서버 역할)는 데이터베이스 역할에 추가할 수 없습니다. SQL Server의 서버 수준 보안의 경우 서버 역할을 대신 사용합니다. Azure SQL 데이터베이스 및 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 고정 데이터베이스 역할의 구성원은 모든 사용자 테이블 및 뷰에서 모든 데이터를 읽을 수 있습니다. 사용자 개체는 sys 및 INFORMATION_SCHEMA 를 제외한 모든 스키마에 있을 수 있습니다. |
db_denydatawriter | db_denydatawriter 고정 데이터베이스 역할의 구성원은 데이터베이스 내 사용자 테이블의 데이터를 추가, 수정 또는 삭제할 수 없습니다. |
db_denydatareader | db_denydatareader 고정 데이터베이스 역할의 구성원은 데이터베이스 내에 있는 사용자 테이블과 뷰의 데이터를 읽을 수 없습니다. |
고정 데이터베이스 역할에 할당된 권한은 변경할 수 없습니다. 다음 그림은 고정 데이터베이스 역할에 할당된 사용 권한을 보여줍니다.
Azure SQL 데이터베이스와 Azure Synapse에 대한 특수 역할
이 데이터베이스 역할은 가상 master
데이터베이스에만 존재합니다. 해당 권한은 .master
에서 수행된 작업으로 제한됩니다. 이 역할에는 master
데이터베이스 사용자만 추가할 수 있습니다. 이 역할에 로그인을 추가할 수는 없지만 로그인에 따라 사용자를 만든 다음 해당 사용자를 역할에 추가할 수 있습니다. master
에서 포함된 데이터베이스 사용자도 역할에 추가할 수 있습니다. 그러나 dbmanager 역할에 master
추가된 포함된 데이터베이스 사용자는 새 데이터베이스를 만드는 데 사용할 수 없습니다.
역할 이름 | 설명 |
---|---|
dbmanager | 데이터베이스를 만들고 삭제할 수 있습니다. 데이터베이스를 만드는 dbmanager 역할의 멤버는 해당 데이터베이스 소유자가 되어 사용자가 dbo 사용자로 데이터베이스에 연결할 수 있도록 허용합니다. dbo 사용자는 해당 데이터베이스에서 모든 데이터베이스 사용 권한을 가집니다. dbmanager 역할의 멤버는 소유하지 않은 데이터베이스에 액세스할 권한이 반드시 필요하지는 않습니다. |
db_exporter | db_exporter 고정 데이터베이스 역할의 구성원은 모든 데이터 내보내기 작업을 수행할 수 있습니다. 이 역할을 통해 부여된 권한은 CREATE TABLE , ALTER ANY SCHEMA , ALTER ANY EXTERNAL DATA SOURCE , ALTER ANY EXTERNAL FILE FORMAT 입니다.적용 대상: Azure Synapse Analytics 전용 SQL 풀(이전의 SQL DW) |
loginmanager | 가상 master 데이터베이스에서 로그인을 만들고 삭제할 수 있습니다. |
참고 항목
서버 수준 보안 주체와 Microsoft Entra 관리자(구성된 경우)는 역할의 구성원이 아니어도 SQL 데이터베이스 및 Azure Synapse Analytics에서 모든 권한이 있습니다. 자세한 내용은 SQL Database, SQL Managed Instance, Azure Synapse Analytics에 대한 데이터베이스 액세스 권한 부여를 참조하세요.
일부 데이터베이스 역할은 Azure SQL 또는 Azure Synapse에 적용되지 않습니다.
백업 및 복원 T-SQL 명령을 사용할 수 없으므로 db_backupoperator는 Azure SQL 데이터베이스(Azure SQL Managed Instance가 아님) 및 Azure Synapse Analytics 서버리스 풀에는 적용되지 않습니다.
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 |
이러한 데이터베이스 역할의 멤버는 데이터 수집기를 관리 및 사용할 수 있습니다. 자세한 내용은 데이터 컬렉션을 참조하세요. |
PolicyAdministratorRole | db_ PolicyAdministratorRole 데이터베이스 역할의 멤버는 정책 기반 관리 정책 및 조건의 모든 구성 및 유지 관리 작업을 수행할 수 있습니다. 자세한 정보는 정책 기반 관리를 사용한 서버 관리를 참조하세요. |
ServerGroupAdministratorRole ServerGroupReaderRole |
이 데이터베이스 역할의 구성원은 등록된 서버 그룹을 관리하고 사용할 수 있습니다. |
dbm_monitor | 첫 번째 데이터베이스가 데이터베이스 미러링 모니터에 등록될 때 msdb 데이터베이스에 만들어집니다. dbm_monitor 역할에는 시스템 관리자가 사용자를 역할에 할당할 때까지 구성원이 없습니다. |
db_ssisadmin 역할과 dc_admin 역할의 멤버는 자신의 권한을 sysadmin으로 승격할 수 있습니다. 이러한 권한 승격이 발생할 수 있는 것은 이러한 역할이 Integration Services 패키지를 수정할 수 있고 Integration Services 에서 SQL Server 에이전트의 sysadmin 보안 컨텍스트를 사용하여 SQL Server 패키지를 실행할 수 있기 때문입니다. 유지 관리 계획, 데이터 컬렉션 집합 및 기타 Integration Services 패키지를 실행할 때 이러한 권한 상승이 발생하지 않게 하려면 패키지를 실행하는 SQL Server 에이전트 작업이 제한된 권한을 갖는 프록시 계정을 사용하도록 구성하거나 db_ssisadmin 및 dc_admin 역할에 sysadmin 구성원만 추가합니다.
데이터베이스 수준 역할 작업
다음 표에서는 데이터베이스 수준 역할 작업을 위한 명령, 보기 및 함수에 대해 설명합니다.
기능 | Type | 설명 |
---|---|---|
sp_helpdbfixedrole | 메타데이터 | 고정 데이터베이스 역할의 목록을 반환합니다. |
sp_dbfixedrolepermission | 메타데이터 | 고정 데이터베이스 역할의 사용 권한을 표시합니다. |
sp_helprole | 메타데이터 | 현재 데이터베이스의 역할에 관한 정보를 반환합니다. |
sp_helprolemember | 메타데이터 | 현재 데이터베이스에 있는 역할의 멤버에 관한 정보를 반환합니다. |
sys.database_role_members | 메타데이터 | 각 데이터베이스 역할의 각 구성원에 대해 하나의 행을 반환합니다. |
IS_MEMBER | 메타데이터 | 현재 사용자가 지정된 Microsoft Windows 그룹, Microsoft Entra 그룹 또는 Microsoft SQL Server 데이터베이스 역할의 구성원인지 여부를 표시합니다. |
CREATE ROLE | 명령 | 현재 데이터베이스에 새 데이터베이스 역할을 만듭니다. |
ALTER_ROLE | 명령 | 데이터베이스 역할의 이름 또는 구성원 자격을 변경합니다. |
DROP ROLE | 명령 | 데이터베이스에서 역할을 제거합니다. |
sp_addrole | 명령 | 현재 데이터베이스에 새 데이터베이스 역할을 만듭니다. |
sp_droprole | 명령 | 현재 데이터베이스에서 데이터베이스 역할을 제거합니다. |
sp_addrolemember | 명령 | 데이터베이스 사용자, 데이터베이스 역할, Windows 로그인 또는 Windows 그룹을 현재 데이터베이스의 데이터베이스 역할에 추가합니다. 대신 PDW(Analytics Platform System) 및 Azure Synapse를 제외하고 플랫폼은 모두 ALTER ROLE 을 사용해야 합니다. |
sp_droprolemember | 명령 | 현재 데이터베이스의 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
INNER JOIN sys.database_principals AS roles
ON database_role_members.role_principal_id = roles.principal_id
INNER JOIN sys.database_principals AS members
ON database_role_members.member_principal_id = members.principal_id;
GO