Azure SQL Database Azure SQL Data Warehouse 대한 액세스 제어 권한 부여

 

·       Version : Azure SQL

 

Azure SQL Database Azure SQL Data Warehouse 방화벽 규칙이 구성된 후에는 관리자 계정 하나로, 데이터베이스 소유자로 또는 데이터베이스의 데이터베이스 사용자로 SQL Database SQL Data Warehouse 연결할 있다.

·       방화벽 규칙 설정 : https://docs.microsoft.com/ko-kr/azure/sql-database/sql-database-firewall-configure?WT.mc_id=DP-MVP-4039834

 

관리자로 작동하는 계정에는 가지가 (서버 관리자 Active Directory 관리자) 있습니다. SQL 서버에 대해 이러한 관리자 계정을 식별하려면 Azure Portal 열고 SQL Server 또는 SQL Database [속성] 탭으로 이동한다.

 

 

·       Server Admin login Azure SQL 서버를 만들 서버 관리자 로그인을 지정해야 한다. SQL 서버는 master 데이터베이스에 로그인으로 해당 계정을 만든다. 계정은 SQL Server 인증(사용자 이름 암호) 사용하여 연결되며 하나만 생성할 있다. 서버 관리자에 대한 암호를 다시 설정하려면 Azure Portal 이동하여 SQL Server 클릭하고 목록에서 서버를 선택한 다음, 암호 재설정을 클릭한다.

·       Azure Active Directory admin 하나의 Azure Active Directory 계정, 개인 또는 보안 그룹 계정을 관리자로 구성할 수도 있다. Azure AD 관리자를 구성하는 것은 선택 사항이지만, Azure AD 계정을 사용하여 SQL Database 연결하려면 Azure AD 관리자를 반드시 구성해야 한다.

 

Server Admin login Azure Active Directory admin 관리자 계정에는 다음과 같은 특징이 있다.

·       서버에서 모든 SQL Database 자동으로 연결할 있는 유일한 계정이다. (사용자 데이터베이스에 연결하려면 다른 계정은 데이터베이스의 소유자이거나 사용자 데이터베이스에 사용자 계정이 있어야 한다.)

·       계정은 dbo 사용자로 사용자 데이터베이스에 연결하고 사용자 데이터베이스에서 모든 권한을 갖는다. (사용자 데이터베이스의 소유자는 또한 dbo 사용자로 데이터베이스에 접속한다.)

·       master 데이터베이스에 dbo 사용자로 접속할 없으며 master에서는 제한된 사용 권한을 갖는다.

·       SQL 데이터베이스에서 sysadmin 역할의 멤버가 아니다.

·       데이터베이스, 로그인, master 사용자 서버 수준 IP 방화벽 규칙을 만들고 변경하고 삭제할 있다.

·       dbmanager loginmanager 역할에 멤버를 추가하고 제거할 있다.

·       sys.sql_logins 시스템 테이블을 있다.

 

서버 수준 방화벽이 제대로 구성되면 SQL 서버 관리자 Azure Active Directory 관리자가 SQL Server Management Studio 또는 SQL Server Data Tools 같은 클라이언트 도구를 사용하여 연결할 있다. 최신 도구만 모든 특징 기능을 제공한다. 다음 다이어그램에서는 명의 관리자 계정에 대한 일반적인 구성을 보여 준다. 서버 수준 방화벽에서 열려 있는 포트를 사용하면 관리자가 모든 SQL Database 연결할 있다.

 

[Serve Level Administrative Roles]

Database creators

dbmanager 역할의 멤버는 데이터베이스를 만들 있다. 역할을 사용하려면 master 데이터베이스에 사용자를 만든 다음 해당 사용자를 dbmanager 데이터베이스 역할에 추가해야 한다. 데이터베이스를 만들려면 사용자가 master 데이터베이스의 SQL Server 로그인을 기반으로 사용자이거나 Azure Active Directory 사용자를 기반으로 포함된 데이터베이스 사용자여야 한다. 아래 스크립트를 사용하여 생성할 있다.

USE master

GO

 

CREATE LOGIN Mary WITH PASSWORD = '<strong_password>';

 

CREATE USER [mike@contoso.com] FROM EXTERNAL PROVIDER; -- To create a user with Azure Active Directory

CREATE USER Ann WITH PASSWORD = '<strong_password>'; -- To create a SQL Database contained database user

CREATE USER Mary FROM LOGIN Mary;  -- To create a SQL Server user based on a SQL Server authentication login

 

ALTER ROLE dbmanager ADD MEMBER Mary;

ALTER ROLE dbmanager ADD MEMBER [mike@contoso.com];

 

Login managers

Loginmanager 멤버는 master 데이터베이스에 로그인을 만들 있다. 원한다면 동일한 단계(로그인 사용자 만들기, 사용자를 login manager 역할에 추가) 완료하여 사용자가 master에서 로그인을 만들 있도록 한다. 일반적으로 Microsoft 로그인 기반 사용자를 사용하는 대신 데이터베이스 수준에서 인증하는 포함된 데이터베이스 사용자를 사용할 것을 권장하므로 로그인이 필수는 아니다.

 

[Non-administrator users]

일반적으로 비관리자 계정은 master 데이터베이스에 액세스할 필요가 없다. 비관리자 계정은 CREATE USER(Transact-SQL) 문을 사용하여 데이터베이스 수준에서 포함된 데이터베이스 사용자를 생성한다. 사용자는 Azure Active Directory 인증 포함 데이터베이스 사용자 (Azure AD 인증용 환경을 구성한 경우) 또는 SQL Server 인증 포함 데이터베이스 사용자 또는 SQL Server 기반 SQL Server 인증 사용자 있다. 아래 예시 스크립트를 사용하여 계정을 생성할 있다.

CREATE USER Mary FROM LOGIN Mary;

CREATE USER [mike@contoso.com] FROM EXTERNAL PROVIDER;

 

GRANT ALTER ANY USER TO Mary;

 

--db_owner 역할 멤버로 설정

ALTER ROLE db_owner ADD MEMBER Mary;

 

--Azure SQL Data Warehouse 경우 아래 실행

EXEC sp_addrolemember 'db_owner', 'Mary';

 

데이터베이스 수준 방화벽이 제대로 구성되었으면 데이터베이스 사용자는 SQL Server Management Studio 또는 SQL Server Data Tools 같은 클라이언트 도구를 사용하여 연결할 있다. 다음 다이어그램에서는 일반적인 비관리자 액세스 경로를 보여준다.

 

외에도 그룹 역할, 권한을 정의 있으며, SQL Database에는 개별적으로 부여하거나 거부할 잇는 100개가 넘는 권한이 있다. 대부분 권한은 중첩되어 사용된다. 자세한 내용은 참고자료의 링크를 확인할 있도록 한다.

 

[참고자료]

·       (영어) https://docs.microsoft.com/en-us/azure/sql-database/sql-database-manage-logins?WT.mc_id=DP-MVP-4039834

·       (한국어) https://docs.microsoft.com/ko-kr/azure/sql-database/sql-database-manage-logins?WT.mc_id=DP-MVP-4039834

 

 

 

2019-11-08 / Sungwook Kang / http://sungwookkang.com/

 

 

Azure SQL Database, Azure SQL Data Warehouse, Azure 방화벽, Azure Database 방화벽, Azure Security, Controlling SQL Database Access, DB 접근, DB 액세스

Azure SQL Database Azure SQL Data Warehouse IP 방화벽 규칙

 

·       Version : Azure SQL

 

Azure SQL Database Azure SQL Data Warehouse IP 방화벽 규칙에 대해서 살펴본다. 여기에서 설명되는 내용은 Azure SQL Database Management Instance 적용되지 않으니 혼돈하지 않도록 한다.

 

인터넷 Azure 환경에서 SQL Server 또는 SQL Database 연결하기 전에 방화벽을 통과해야한다. 크게 서버 수준 IP 방화벽 규칙과 데이터베이스 수준의 IP 방화벽 규칙이 있다. 가능하면 항상 데이터베이스 수준 IP 방화벽 규칙을 사용 하는 것이 좋다. 방법을 사용하면 보안을 강화하 데이터베이스의 이식성을 높일 있다. 관리자에 대해서도 서버 수준 IP 방화벽 규칙을 사용을 권장한다. 동일한 액세스 요구사항을 가진 데이터베이스가 많고 데이터베이스를 개별적으로 구성하지 않으려는 경우에도 데이터베이스 수준의 IP 방화벽 규칙을 사용 한다.

 

 

[서버 수준 IP 방화벽 규칙]

클라이언트는 규칙에 따라 전체 Azure SQL Server, 동일한 SQL Database 서버 내의 모든 데이터베이스에 액세스 있다. 규칙은 master 데이터베이스에 저장 된다. Azure SQL Server 대해 최대 128개의 서버 수준 IP 방화벽 규칙을 사용할 있다. Azure Portal, PowerShell 또는 Transact-SQL 문을 사용하여 서버수준 IP 방화벽 규칙을 구성할 있다.

·       포털 또는 PowerShell 사용 하려면 구독 소유자 또는 구독 참가자 여야한다.

·       Transact-SQL 사용 하려면 서버 수준 보안 주체 로그인 또는 Azure Active Directory 관리자로 SQL Database 인스턴스에 연결해야 한다. 먼저 Azure 수준 사용 권한이 있는 사용자가 서버 수준 IP 방화벽 규칙을 만들어야 한다.

 

[데이터베이스 수준 IP 방화벽 규칙]

클라이언트는 규칙에 따라 동일한 SQL Database 서버 내의 특정(보안) 데이터베이스에 액세스 있다. 데이터베이스(master 데이터베이스 포함) 규칙을 만들어 개별 데이터베이스에 저장한다.

·       서버 수준 방화벽을 구성한 후에만 Transact-SQL 문을 사용하여 master 사용자 데이터베이스에 대한 데이터베이스 수준 IP 방화벽 규칙을 만들고 관리할 있다.

·       서버 수준 IP 방화벽 규칙의 범위를 벗어나는 데이터베이스 수준 IP 방화벽 규칙의 IP 주소 범위를 지정하면 데이터베이스 수준 범위에서 IP 주소가 있는 클라이언트만 데이터베이스에 액세스 있다.

·       데이터베이스에 대해 최대 128개의 데이터베이스 수준 IP 방화벽 규칙을 가질 있다. 데이터베이스 수준 IP 방화벽 규칙을 구성 하는 명령은sp_set_database_firewall_rule (Azure SQL Database) 사용한다.

 

[인터넷으로 통한 데이터베이스 서버 연결]

컴퓨터에서 인터넷을 통해 데이터베이스 서버에 연결 하려고 하면 먼저 방화벽은 연결에서 요청하는 데이터베이스에 대한 데이터베이스 수준 IP 방화벽 규칙에 대해 요청의 원래 IP 주소를 확인한다. 주소가 데이터베이스 수준 IP 방화벽 규칙에 지정 범위 내에 있는 경우 해당 규칙을 포함 하는 SQL database 대해 연결이 가능하다. 주소가 데이터베이스 수준 IP 방화벽 규칙의 범위 내에 없는 경우 방화벽은 서버 수준 IP 방화벽 규칙을 확인한다. 주소가 서버 수준 IP 방화벽 규칙의 범위 내에 있는 경우 연결이 허용된다. 서버 수준 IP 방화벽 규칙은 Azure SQL Server 있는 모든 SQL Database 적용된다. 주소가 데이터베이스 수준 또는 서버 수준 IP 방화벽 규칙의 범위에 포함 되지 않은 경우 연결 요청이 실패한다. 로컬 컴퓨터에서 SQL Database 액세스 하려면 네트워크와 로컬 컴퓨터의 방화벽이 TCP 포트 1433에서 나가는 통신을 허용 하는지 확인 한다.

 

[Azure 내부에서 데이터베이스 서버 연결]

Azure 내에서 호스트 되는 응용 프로그램이 SQL server 연결할 있도록 하려면 Azure 연결을 사용 하도록 설정 해야 한다. Azure 응용 프로그램이 데이터베이스 서버에 연결 하려고 하면 방화벽은 Azure 연결이 허용 되는지 확인한다. 시작 IP 주소가 0.0.0.0 같은 방화벽 설정은 Azure 연결이 허용 됨을 나타낸다. 연결이 허용 되지 않으면 요청이 SQL Database 서버에 도달 하지 않는다. 옵션은 다른 고객의 구독에서 연결을 포함하여 Azure 모든 연결을 허용 하도록 방화벽을 구성한다. 옵션을 선택 하는 경우 로그인 사용자 권한이 권한 있는 사용자만 액세스할 있도록 제한 해야한다.

 

[IP 방화벽 규칙 만들기 관리]

·       Azure Portal에서 방화벽 규칙 생성

 

·       Transact-SQL 사용한 IP 방화벽 규칙 관리

View or SP

Level

Description

sys.firewall_rules

서버

현재 서버 수준 IP 방화벽 규칙을 표시

sp_set_firewall_rule     

서버

서버 수준 IP 방화벽 규칙을 생성 업데이트

sp_delete_firewall_rule

서버

서버 수준 IP 방화벽 규칙을 제거

sys.database_firewall_rules       

데이터베이스

현재 데이터베이스 수준 IP 방화벽 규칙을 표시

sp_set_database_firewall_rule 

데이터베이스

데이터베이스 수준 IP 방화벽 규칙을 생성 업데이트

sp_delete_database_firewall_rule

데이터베이스

데이터베이스 수준 IP 방화벽 규칙을 제거

 

아래 예시는 기존 규칙을 검토ㅠㅏ고 Contoso서버에서 IP주소 범위를 사용하도록 설정하고 IP 방화벽 규칙을 삭제한다.

SELECT * FROM sys.firewall_rules ORDER BY name;

 

아래 예시는 서버 수준 IP 방화벽 규칙을 추가한다.

EXECUTE sp_set_firewall_rule @name = N'ContosoFirewallRule',  @start_ip_address = '192.168.1.1', @end_ip_address = '192.168.1.10'

 

아래 예시는 서버 수준의 IP 방화벽 규칙을 삭제한다.

EXECUTE sp_delete_firewall_rule @name = N'ContosoFirewallRule'

 

 

[참고자료]

·       (영어) https://docs.microsoft.com/en-us/azure/sql-database/sql-database-firewall-configure?WT.mc_id=DP-MVP-4039834

·       (한국어) https://docs.microsoft.com/ko-kr/azure/sql-database/sql-database-firewall-configure?WT.mc_id=DP-MVP-4039834

 

 

 

2019-11-06 / Sungwook Kang / http://sungwookkang.com/

 

 

Azure SQL Database, Azure SQL Data Warehouse, Azure 방화벽, Azure Database 방화벽, Azure Security

Azure SQL Database 보안 기능 개요

 

·       Version : Azure SQL

 

Microsoft Azure SQL Database 클라우드 엔터프라이즈 애플리케이션용 관계형 데이터베이스 서비스를 제공한다. Azure SQL Database보안 전략은 아래 그림 처럼 계층형 심층 방어 방식을 따르며 외부에서 내부로 적용된다.

 

고객 데이터를 보호하기 위해 방화벽은 Azure Virtual Network 트래픽 출처 또는 IP 주소를 기준으로 액세스 권한이 명시적으로 부여될 때까지 네트워크에서 데이터베이스 서버에 액세스할 없도록 차단한다. Azure SQL Database 보안 기능의 자세한 내용은 Microsoft 공식 문서를 참고한다.

·       (영어) https://docs.microsoft.com/en-us/azure/sql-database/sql-database-security-overview?WT.mc_id=DP-MVP-4039834

·       (한국어) https://docs.microsoft.com/ko-kr/azure/sql-database/sql-database-security-overview?WT.mc_id=DP-MVP-4039834

 

[네트워크 보안]

·       IP 방화벽 규칙 : IP 방화벽 규칙은 요청이 시작된 IP 주소를 기준으로 하여 데이터베이스 액세스 권한을 부여한다.

·       Virtual Network 방화벽 규칙 : 가상 네트워크 서비스 엔드포인트는 Azure 백본을 통해 가상 네트워크 연결을 확장하며, 트래픽이 생성되는 가상 네트워크 서브넷을 Azure SQL Database 식별할 있도록 한다. 트래픽이 Azure SQL Database 전송되도록 하려면 SQL 서비스 태그를 사용해 네트워크 보안 그룹을 통한 아웃바운드 트래픽을 허용한다. Azure SQL Database 가상 네트워크 규칙을 통해 Virtual Network 내의 선택한 서브넷에서 전송된 통신만 수락할 있습니다.

 

[액세스 관리]

Azure 내에서 데이터베이스와 데이터베이스 서버를 관리하는 작업은 포털 사용자 계정의 역할 할당을 통해 제어된다. Azure SQL Database 가지 인증 유형을 지원한다.

·       SQL 인증 : SQL 데이터베이스 인증은 사용자 이름과 암호를 사용하여 Azure SQL Database 연결할 사용자가 수행하는 인증을 지칭한다.

·       Azure Active Directory 인증 : Azure Active Directory 인증은 Azure AD(Azure Active Directory) ID 사용하여 Azure SQL Database SQL Data Warehouse 연결하는 메커니즘이다. 관리자는 Azure AD 인증을 통해 데이터베이스 사용자의 ID 권한과 기타 Microsoft 서비스를 중앙 위치 곳에서 관리할 있다. SQL Database 사용한 Azure AD 인증을 사용하려면 서버 관리자 Active Directory 관리자를 만들어야 한다. Azure AD 인증에서는 관리 계정과 페더레이션된 계정이 모두 지원된다. 페더레이션된 계정은 Azure AD 페더레이션된 고객 도메인용 Windows 사용자 그룹을 지원한다. 사용 가능한 추가 Azure AD 인증 옵션으로는 다단계 인증 조건부 액세스를 비롯한 SQL Server Management Studio Active Directory 유니버설 인증 연결이 있다.

 

[Authorization]

권한은 데이터베이스 역할에 사용자 계정을 추가 해당 역할에 데이터베이스 수준 사용 권한을 할당 하거나 사용자에 특정 개체수준 사용권한을 부여하여 제어 된다. 필요한 경우 작업 기능을 수행 하는 필요한 최소한의 권한만 가진 사용자를 역할에 추가 한다. 서버 관리자 계정은 기본적으로 db_owner 역할의 구성원이며, 관리 업무를 사용하는 소수의 사용자 에게만 부여 되어야 한다.

 Azure SQL Database 응용 프로그램의 경우 EXECUTE AS 사용 호출 모듈의 실행 컨텍스트를 지정 하거나 제한 권한으로 응용 프로그램 역할을 사용한다. 이렇게 하면 데이터베이스에 연결 하는 응용 프로그램에 응용 프로그램에 필요한 최소한의 권한만 부여된다.

·       수준 보안 : 수준 보안을 통해 고객은 쿼리를 실행하는 사용자의 특성(: 그룹 멤버 자격 또는 실행 컨텍스트) 기반으로 하여 데이터베이스 테이블의 행에 대한 액세스를 제어할 있다.

 

[위협 보호]

·       Azure Monitor 로그 Event Hubs SQL 감사 : SQL Database 감사는 데이터베이스 활동을 추적하며 고객이 소유한 Azure Storage 계정의 감사 로그에 데이터베이스 이벤트를 기록하여 보안 표준 규정 준수 상태를 유지할 있도록 지원한다. 사용자는 감사를 통해 진행 중인 데이터베이스 활동을 모니터링하고 이전 활동을 분석 조사하여 잠재적 위협이나 악용 의심 사례 보안 위반을 식별할 있다.

·       Advanced Threat Protection : Advanced Threat Protection SQL Server 로그를 분석 비정상적인 동작을 감지 잠재적으로 유해한 데이터베이스 액세스 또는 악용 시도를 감지 한다.

 

[정보 보호 암호화]

·       TLS(전송 계층 보안)(전송 암호화) : SQL Server 모든 연결에 대해 항상 암호화 (SSL/TLS) 적용 한다. 연결 문자열에서 Encrypt 또는 TrustServerCertificate 설정에 관계 없이 모든 데이터가 클라이언트와 서버 간에 "전송 "으로 암호화 된다.

·       투명한 데이터 암호화(미사용 데이터 암호화) : Azure SQL Database TDE(투명한 데이터 암호화) 원시 파일이나 백업에 무단/오프라인으로 액세스할 없도록 미사용 데이터를 보호하기 위해 보안 계층을 추가한다. TDE AES 알고리즘을 사용하여 전체 데이터베이스를 암호화 한다. Azure에서는 새로 만드는 모든 SQL Database 기본적으로 암호화되며, 기본 제공 서버 인증서를 통해 데이터베이스 암호화 키가 보호된다. 서비스에서 인증서 유지 관리 순환을 관리하므로 사용자 입력은 불필요하며, 암호화 키를 직접 제어하려는 고객은 Azure Key Vault에서 키를 관리할 있다.

·       Azure Key Vault으로 관리 : 고객은 TDE( 투명한 데이터 암호화)용으로 지원되는 BYOK(Bring Your Own Key) 활용해 Azure 클라우드 기반 외부 관리 시스템인  Azure Key Vault 사용하여 관리 순환을 직접 제어할 있다. 데이터베이스의 자격 증명 모음 액세스 권한이 철회되면 데이터베이스를 암호 해독하여 메모리로 읽어들일 없다. 중앙 관리 플랫폼을 제공하며 철저하게 모니터링되는 HSM(하드웨어 보안 모듈) 활용하는 Azure Key Vault 사용하면 키와 데이터 관리 작업을 분리하여 보안 규정 준수 요구 사항을 충족할 있다.

·       Always Encrypted(사용 중인 데이터 암호화) : Always Encrypted 신용 카드 번호, 주민 등록 번호 또는 확인이 필요한 데이터와 같이 특정 데이터베이스 열에 저장된 중요한 데이터를 액세스할 없도록 보호하는 기능이다. 데이터는 항상 암호화되므로 암호화 액세스 권한이 있는 클라이언트 애플리케이션에서 처리해야 하는 경우에만 암호화된 데이터의 암호가 해독된다. 암호화 키는 SQL 표시되지 않으며 Windows 인증서 저장소 또는 Azure Key Vault 저장할 있다.

 

·       동적 데이터 마스킹 : SQL Database 동적 데이터 마스킹에서는 권한이 없는 사용자에 대해 중요한 데이터를 마스킹해 표시함으로써 데이터 노출을 제한한다. 동적 데이터 마스킹은 Azure SQL Database에서 잠재적으로 중요한 데이터를 자동으로 검색하고 애플리케이션 계층에 미치는 영향을 최소화하면서 이러한 필드를 마스킹할 있는 실행 가능한 권장 사항을 제공한다. 기능은 지정된 데이터베이스 필드를 통해 쿼리의 결과 집합에 있는 중요한 데이터를 혼란스럽게 만들면서 작동하지만 데이터베이스의 데이터를 변경하지는 않는다.

 

 

 

 

[참고자료]

·       (영어) https://docs.microsoft.com/en-us/azure/sql-database/sql-database-security-overview?WT.mc_id=DP-MVP-4039834

·       (한국어) https://docs.microsoft.com/ko-kr/azure/sql-database/sql-database-security-overview?WT.mc_id=DP-MVP-4039834

 

 

 

 

2019-10-16 / Sungwook Kang / http://sungwookkang.com/

 

 

Azure SQL Database, Azure TDE, Azure Security, Azure Network Security,  Azure SQL Dynamic Data Masking

Azure SQL에서 선택할 있는 다양한 배포 옵션

                                                                                                                                       

·       Version : Azure SQL

 

Microsoft Azure SQL 다양한 배포 옵션을 제공한다. 리프트 시프트 마이그레이션에서 기존 애플리케이션 현대화, 최신 클라우드 서비스 구축에 이르기 까지 Microsoft SQL Server 엔진으로 구동되는 여러 배포 옵션을 제공한다. Azure SQL 단일 통합 관리 환경을 제공하여 다양한 SQL Server 기반 응용 프로그램 모음을 대규모로 관리하는 복잡성을 제거한다. 배포에 옵션에 관한 자세한 내용은 아래 링크를 참고 한다.

·       (영어) https://docs.microsoft.com/en-us/azure/sql-database/sql-database-paas-vs-sql-server-iaas?WT.mc_id=DP-MVP-4039834

·       (한국어) https://docs.microsoft.com/ko-kr/azure/sql-database/sql-database-paas-vs-sql-server-iaas?WT.mc_id=DP-MVP-4039834

Microsoft 데이터 플랫폼은 SQL Server 기술을 활용하며 물리적 -프레미스 컴퓨터, 사설 클라우드 환경, 타사 호스팅 사설 클라우드 환경 공용 클라우드에 걸쳐 사용할 있도록 한다. Azure virtual machine ( SQL virtual machines) 대한 SQL Server 사용하면 동일한 서버 제품, 개발 도구 전문 지식 집합을 사용하는 동시에 -프레미스 클라우드 호스팅 배포를 조합하여 고유하고 다양한 비즈니스 요구사항을 충족할 있다. 아래 그림에 표시된 것처럼 제품은 인프라를 통해 보유하고 있는 관리 수준 비용 효울성을 기준으로 지정할 있다.

 

 

[SQL Database ]

안정적인 최신 SQL Server 기능을 사용하고 개발 마케팅에 시간 제한이 있는 최신 클라우드 응용 프로그램에 가장 적합하다. 안정적인 최신 SQL Server Enterprise Edition 기준으로 하는 완전 관리형 SQL 데이터베이스 엔진은PaaS(Platform as a Service) 범주로 분류되며, Azure 클라우드에서 호스트되는 관계형 DBaaS(Database as a Service)이다. SQL 데이터베이스는 여러 배포 옵션을 제공하며, 배포 옵션은 Microsoft에서 소유하고 호스트하고 유지 관리하는 표준화된 하드웨어 소프트웨어를 기반으로 한다. SQL Server 사용하면 광범위한 구성 (-프레미스 또는 Azure 가상 컴퓨터) 필요로 하는 기본 제공기능 기능을 사용할 있다. SQL Database 사용할 경우 추가 성능에 맞게 중단 없이 강화 확장하는 옵션을 통해 사용량에 따라 지불한다. SQL Database에는 기본 제공 고가용성, 인텔리전스 관리와 같이 SQL Server에서 사용할 없는 가지 추가 기능이 있다.

·       데이터베이스 서버를 통해 관리되는 자체 리소스 집합이 포함 단일 데이터베이스는 SQL Server 포함 데이터베이스와 비슷하다. 옵션은 새로운 클라우드 기반 애플리케이션의 최신 애플리케이션 개발에 맞게 최적화되어 있다. Hyperscale 서버 리스 옵션을 사용할 있다.

·       데이터베이스 서버를 통해 관리 되는 리소스의 공유 집합이 있는 데이터베이스를 Elastic Pool 이동하거나 Elastic Pool에서 제거할 있다. 옵션은 다중 테넌트 SaaS 응용 프로그램 패턴을 사용하여 새로운 클라우드를 사용 하는 응용 프로그램의 최신 응용 프로그램 개발에 최적화 되어 있다. Elastic Pool 변수 사용 패턴이 있는 여러 데이터베이스의 성능을 관리 하는 비용 효율적인 솔루션을 제공한다.

·       단일 데이터베이스 Elastic Pool 그룹을 관리하는 사용되는 데이터베이스 서버입니다. 데이터베이스 서버는 여러 단일 데이터베이스 또는 풀링된 데이터베이스, 로그인, 방화벽 규칙, 감사 규칙, 위협 검색 정책및 장애조치 (failover) 그룹에 대한 중앙 관리 지점 역할을 한다.

 

[SQL Managed Instance]

클라우드로의 대부분 마이그레이션에 적합 하다.Managed Instance 리프트 시프트 준비가 리소스의 공유 집합을 사용하는 시스템 사용자 데이터베이스의 컬렉션이다. 안정적인 최신 SQL Server 기능을 사용하고 최소한의 변경으로 클라우드로 마이그레이션되는 응용 프로그램 또는 기존 -프레미스 응용 프로그램에 가장 적합하다. Managed Instance 데이터베이스의 공유 리소스 추가 인스턴스 범위 기능을 제공 하는 Microsoft SQL Server 데이터베이스 엔진의 인스턴스와 비슷하다. Managed Instance 데이터베이스 변경없이 또는 최소한의 변경으로 -프레미스에서 데이터베이스를 마이그레이션할 있도록 지원한다. 옵션은 Azure SQL Database 모든 PaaS 혜택을 제공하지만 이전에 SQL VM에서만 사용할 있었던 기능을 추가한다. 여기에는 기본 가상 네트워크(VNet) -프레미스 SQL Server와의 거의 100% 호환성이 포함된다. Managed Instance SQL Server Azure 마이그레이션하기 위한 전체 SQL Server 액세스 기능 호환성을 제공한다.

 

[SQL virtual machines]

OS 수준 액세스를 필요로 하는 마이그레이션 응용 프로그램에 가장 적합하다. SQL 가상 머신은 변경 내용을 최소화 하거나 변경 하지 않고 클라우드로 신속하게 마이그레이션해야 하는 기존 응용 프로그램에 대해 리프트 시프트가 준비된다. SQL 가상 머신은 Azure로의 마이그레이션을 위해 SQL Server 인스턴스 기본 OS 모든 관리 권한을 제공한다. SQL 가상 머신은 IaaS (Infrastructure as a Service ) 포함 되며, Azure 클라우드의 완전히 관리 되는 VM (가상 머신) 내에서 SQL Server 실행할 있다. SQL 가상 머신은 Microsoft에서 소유하고 호스트 하며 유지관리하는 표준화된 하드웨어에서도 실행된다. SQL 가상 컴퓨터를 사용하는경우 이미 SQL Server 이미지에 포함 SQL Server 라이선스를 지불하거나 기존 라이선스를 쉽게 사용할 있다. 필요에 따라 VM 중지하거나 다시 시작할 수도 있다. 클라우드에 설치 호스트 되는 SQL Server Azure에서 실행 되는 Windows Server 또는 Linux 가상 컴퓨터 (IaaS (infrastructure as a service) 라고도 )에서 실행된다. SQL 가상 머신은 데이터베이스를 변경 하지않고 -프레미스 SQL Server 데이터베이스 응용 프로그램을 마이그레이션하는데 적합한 옵션이다. 모든 최신 버전의 SQL Server IaaS 가상 머신에 설치할 있다. SQL database SQL Managed Instance 가장 중요한 차이점은 SQL Server VM 데이터베이스 엔진에 대한 모든 권한을 허용 한다는 것이다. 유지 관리/패치를 시작할 시기를 선택하고, 복구 모델을 단순 또는 대량 로그로 변경하거나, 필요에 따라 서비스를 일시 중지 하거나 시작 , SQL Server 데이터베이스 엔진을 완벽하게 사용자 지정할 있다. 추가 컨트롤을 사용 하면 가상 머신을 관리하는 추가 책임이 있다.

 

Azure Portal에서는 SQL 가상 머신을 비롯 모든 Azure SQL 리소스 관리할 있는 단일 페이지를 제공 한다. Azure SQL 리소스 페이지에 액세스 하려면 Azure Portal 왼쪽 메뉴에서 Azure SQL 선택한. Azure SQL 목록에 없는 경우 모든 서비스를 선택한 다음 검색 상자에 Azure SQL 입력 합니다.기존 리소스를 관리 하려면 목록에서 원하는 항목을 선택한다. Azure SQL 리소스를 만들려면 [+ Add] 선택한다.

 

[+ Add] 선택한 여러 옵션에 대한 추가 정보를 확인할 있다.

 

 

[참고자료]

·       (영어) https://docs.microsoft.com/en-us/azure/sql-database/sql-database-paas-vs-sql-server-iaas?WT.mc_id=DP-MVP-4039834

·       (한국어) https://docs.microsoft.com/ko-kr/azure/sql-database/sql-database-paas-vs-sql-server-iaas?WT.mc_id=DP-MVP-4039834

 

 

 

2019-10-10 / Sungwook Kang / http://sungwookkang.com/

 

 

Azure SQL, Managed Instance, Azure SQL Database, Azure Virtual Machine

Azure SQL 데이터베이스 소유권 체인

 

·         Version : Azure SQL

 

Azure SQL Database Managed Instance에서는 SQL Server 동일한 방식으로 데이터베이스간 쿼리를 실행할 있다. 또한 데이터베이스간 소유권 체인을 지원한다. 이번 포스트에서는 Managed Instance 소유권 체인에 대해서 다루어 본다.

 

데이터베이스간의 소유권 체인을 사용하면 명시적 권한이 객체에 부여되지 않더라도SQL 인스턴스의 다른 데이터베이스에 있는 객체에 액세스 있다. DB_CHAINING옵션이 데이터베이스에서 설정되어 있는 경우 동일한 소유자로 다른 데이터베이스에 액세스할 있다.  

DB_CHAINING is disabled by default on new databases because you need to be aware what it exactly do and does it violates some security policy in your system before you explicitly enable it.

 

DB_CHAINING 시스템의 일부 보안 정책을 위반하므로 기본적으로 비활성화 되어있다.

 

여러 데이터베이스의 여러 오브젝트에서 동일한 소유자가 있고 오브젝트에 액세스하는 스토어드 프로시저가 있는 경우 프로시저가 액세스해야하는 모든 오브젝트에 대한 액세스 권한을 GRANT 필요가 없다. 프로시저와 오브젝트의 소유자가 동일한 경우 프로시저에 대한 GRANT 권한을 부여할 있으며 데이터베이스 엔진은 프로시저가 동일한 소유자를 공유하는 다른 모든 개체에 액세스 있게 한다.

아래 예제에서는 데이터에 액세스하는데 사용되는 동일한 소유자 로그인이 있는 개의 데이터베이스를 생성한다. PrimaryDatabase DataTable 이라는 테이블을 가지고 있으며,  SecondaryDatabase PrimaryDatabase DataTable 에서 데이터를 읽는 저장프로시저를 갖는다. 저장 프로시저를 실행하기 위해 로그인이 부여되었지만 테이블 데이터를 읽지는 못하였다.

-- Create two databases and a login that will call procedure in one database

CREATE DATABASE PrimaryDatabase;

GO

CREATE DATABASE SecondaryDatabase;

GO

CREATE LOGIN TheLogin WITH PASSWORD = 'Very strong password!'

GO

 

-- Create one database with some data table,

-- and another database with a procedure that access the data table.

USE PrimaryDatabase;

GO

CREATE PROC dbo.AccessDataTable

AS

BEGIN

SELECT COUNT(*) FROM SecondaryDatabase.dbo.DataTable;

END;

GO

CREATE USER TheUser FOR LOGIN TheLogin;

GO

GRANT EXECUTE ON dbo.AccessDataTable TO TheUser;

GO

 

USE SecondaryDatabase;

GO

SELECT * INTO dbo.DataTable FROM sys.objects;

GO

CREATE USER TheUser FOR LOGIN TheLogin;

GO

 

저장 프로시저를 사용하여 데이터를 읽으려고 하면 로그인에 테이블에 대한 GRANT 권한이 없기 때문에 오류가 발생한다.

EXECUTE('SELECT * FROM SecondaryDatabase.dbo.DataTable') AS LOGIN = 'TheLogin' ;

GO

-- Msg 229, Level 14, State 5, Line 34

-- The SELECT permission was denied on the object 'DataTable', database 'SecondaryDatabase', schema 'dbo'.

 

저장 프로시저를 사용하여 테이블에서 데이터를 읽으려고 하는 경우에도 동일한 문제가 발생한다.

EXECUTE('EXEC PrimaryDatabase.dbo.AccessDataTable') AS LOGIN = 'TheLogin' ;

GO

--Msg 229, Level 14, State 5, Procedure dbo.AccessDataTable, Line 5 [Batch Start Line 65]

--The SELECT permission was denied on the object 'DataTable', database 'SecondaryDatabase', schema 'dbo'.

 

사용자에게 프로시저를 실행할 있는 권한은 있지만 데이터베이스 엔진은 해당 로그인에 대해 SecondaryDatabase 테이블에서 읽을 있는 액세스 권한이 없으므로 쿼리를 차단한다. 아래 스크립트는 데이터베이스 소유권 체인을 활성화 한다.

ALTER DATABASE PrimaryDatabase SET DB_CHAINING ON;

GO

ALTER DATABASE SecondaryDatabase SET DB_CHAINING ON;

GO

 

저장 프로시저를 통해 테이블에 다시 액세스하면 결과가 표시된다.

EXECUTE('EXEC PrimaryDatabase.dbo.AccessDataTable') AS LOGIN = 'TheLogin' ;

 

Managed Instance / Database Engine 저장 프로시저와 테이블이 동일한 소유자를 가지며 DB_CHAINING 켜져있기 때문에 테이블에 대한 액세스를 허용한다. 그러나 해당 로그인에 대해 직접적인 테이블에 액세스하는 권한은 없으므로 직접 테이블에 액세스 수는 없다.

EXECUTE('SELECT * FROM SecondaryDatabase.dbo.DataTable') AS LOGIN = 'TheLogin' ;

GO

--Msg 229, Level 14, State 5, Line 54

--The SELECT permission was denied on the object 'DataTable', database 'SecondaryDatabase', schema 'dbo'.

 

데이터베이스 소유권 체인이 유용할 뿐만 아니라 보안 관점에서 예기치 않은 동작이 발생할 있으므로 해당 옵션을 활성화 할때는 신중함이 필요하다.

 

[참고자료]

https://blogs.msdn.microsoft.com/sqlserverstorageengine/2018/08/17/database-ownership-chaining-in-azure-sql-managed-instance/

 

 

 

2018-09-06 / Sungwook Kang / http://sqlmvp.kr

 

Azure SQL,  Managed Instance, SQL, Azure SQL Database, SQL Server Security, DB_CHAINING


+ Recent posts