Linux의 SQL Server의 보안 기능에 대 한 연습Walkthrough for the security features of SQL Server on Linux

이 항목 적용 대상: 예SQL Server (Linux 전용)없음Azure SQL Database없음Azure SQL Data Warehouse없음 병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO: yesSQL Server (Linux only)noAzure SQL DatabasenoAzure SQL Data WarehousenoParallel Data Warehouse

SQL Server의 새로운 Linux 사용자 인 경우 다음 작업을 안내 보안 작업의 일부입니다.If you are a Linux user who is new to SQL Server, the following tasks walk you through some of the security tasks. 이러한 고유한 또는 Linux를 특정 아니지만 추가 조사를 위해 영역의 아이디어를 제공 하는 데 도움이 됩니다.These are not unique or specific to Linux, but it helps to give you an idea of areas to investigate further. 각 예제에서는 해당 영역에 대 한 자세한 설명서 링크가 제공 됩니다.In each example, a link is provided to the in-depth documentation for that area.

참고

다음 예에서는 합니다 AdventureWorks2014 샘플 데이터베이스.The following examples use the AdventureWorks2014 sample database. 이 샘플 데이터베이스를 설치 하는 방법에 대 한 자세한 내용은 참조 하세요. Windows에서 Linux에 SQL Server 데이터베이스를 복원합니다.For instructions on how to obtain and install this sample database, see Restore a SQL Server database from Windows to Linux.

로그인 및 데이터베이스 사용자 만들기Create a login and a database user

다른 로그인을 만들고 사용 하 여 master 데이터베이스에서 SQL Server에 대 한 액세스 부여 합니다 CREATE LOGIN 문입니다.Grant others access to SQL Server by creating a login in the master database using the CREATE LOGIN statement. 예를 들어:For example:

CREATE LOGIN Larry WITH PASSWORD = '************';  

참고

항상 이전 명령에서 별표 대신 강력한 암호를 사용 합니다.Always use a strong password in place of the asterisks in the previous command.

로그인은 SQL Server에 연결 하 고 (제한 된 권한)으로 master 데이터베이스에 액세스할 수 있습니다.Logins can connect to SQL Server and have access (with limited permissions) to the master database. 사용자가 사용자 데이터베이스에 연결 하려면 로그인 이라는 데이터베이스 사용자, 데이터베이스 수준에서 해당 id를 해야 합니다.To connect to a user-database, a login needs a corresponding identity at the database level, called a database user. 사용자가 각 데이터베이스에만 적용 되며 액세스 권한을 부여 하려면 각 데이터베이스에 개별적으로 만들어야 합니다.Users are specific to each database and must be separately created in each database to grant them access. 다음 예제에서는 AdventureWorks2014 데이터베이스를 이동 하 고 사용 하 여는 CREATE USER 문을 Larry 라는 로그인과 연결 된 Larry 이라는 사용자를 만듭니다.The following example moves you into the AdventureWorks2014 database, and then uses the CREATE USER statement to create a user named Larry that is associated with the login named Larry. 로그인 및 사용자 (서로에 매핑됨) 관련 된, 경우에 다른 개체입니다.Though the login and the user are related (mapped to each other), they are different objects. 로그인이는 서버 수준 보안 주체입니다.The login is a server-level principle. 사용자가 데이터베이스 수준 보안 주체입니다.The user is a database-level principal.

USE AdventureWorks2014;
GO
CREATE USER Larry;
GO
  • SQL Server 관리자 계정 데이터베이스에 연결할 수 있으며 자세한 로그인 및 사용자 데이터베이스에서 만들 수 있습니다.A SQL Server administrator account can connect to any database and can create more logins and users in any database.
  • 사용자 데이터베이스를 만들 때 해지기 데이터베이스 소유자는 데이터베이스에 연결할 수 있습니다.When someone creates a database they become the database owner, which can connect to that database. 데이터베이스 소유자는 더 많은 사용자를 만들 수 있습니다.Database owners can create more users.

나중에 권한을 부여할 수 있습니다 부여 하 여 자세한 로그인을 만들려면 다른 로그인을 ALTER ANY LOGIN 권한.Later you can authorize other logins to create a more logins by granting them the ALTER ANY LOGIN permission. 데이터베이스 내에서 권한을 부여할 수 있습니다 다른 사용자가 부여 하 여 더 많은 사용자를 만들 수는 ALTER ANY USER 권한.Inside a database, you can authorize other users to create more users by granting them the ALTER ANY USER permission. 예를 들어:For example:

GRANT ALTER ANY LOGIN TO Larry;   
GO   

USE AdventureWorks2014;   
GO   
GRANT ALTER ANY USER TO Jerry;    
GO   

Larry 로그인 자세한 로그인을 만들 수는 이제 만들어 사용자 Jerry 수 더 많은 사용자.Now the login Larry can create more logins, and the user Jerry can create more users.

최소 권한으로 액세스 권한 부여Granting access with least privileges

사용자-데이터베이스에 연결할 첫 번째 사용자는 관리자 및 데이터베이스 소유자 계정이 됩니다.The first people to connect to a user-database will be the administrator and database owner accounts. 그러나 이러한 사용자가 모든는 데이터베이스에서 사용할 수 있는 권한입니다.However these users have all the the permissions available on the database. 이것은 자세한 사용 권한 보다 대부분의 사용자에 게 있어야 합니다.This is more permission than most users should have.

바로 시작 하는, 하는 경우 기본 제공을 사용 하 여 사용 권한의 몇 가지 일반적인 범주를 할당할 수 있습니다 고정 데이터베이스 역할입니다.When you are just getting started, you can assign some general categories of permissions by using the built-in fixed database roles. 예를 들어를 db_datareader 고정된 데이터베이스 역할을 데이터베이스의 모든 테이블을 읽을 수 있지만 변경 하지 않습니다.For example, the db_datareader fixed database role can read all tables in the database, but make no changes. 사용 하 여 고정된 데이터베이스 역할의 멤버 자격을 부여 합니다 ALTER ROLE 문입니다.Grant membership in a fixed database role by using the ALTER ROLE statement. 다음 예제에서는 사용자를 추가 Jerrydb_datareader 고정된 데이터베이스 역할.The following example add the user Jerry to the db_datareader fixed database role.

USE AdventureWorks2014;   
GO   

ALTER ROLE db_datareader ADD MEMBER Jerry;   

고정된 데이터베이스 역할의 목록을 참조 하세요 데이터베이스 수준 역할입니다.For a list of the fixed database roles, see Database-Level Roles.

(권장) 데이터를 보다 정밀 하 게 액세스를 구성 하려면 준비가 되었을 때 사용 하 여 고유한 사용자 정의 데이터베이스 역할을 만들려면 나중 CREATE ROLE 문입니다.Later, when you are ready to configure more precise access to your data (highly recommended), create your own user-defined database roles using CREATE ROLE statement. 그런 다음 특정 세부적인 권한을 할당 하면 사용자 지정 역할입니다.Then assign specific granular permissions to you custom roles.

예를 들어 다음 문은 라는 데이터베이스 역할을 만듭니다 Sales, 부여는 Sales 참조, 업데이트 및에서 행을 삭제 하는 기능 그룹을 Orders 테이블을 선택한 다음 사용자를 추가 JerrySales 역할.For example, the following statements create a database role named Sales, grants the Sales group the ability to see, update, and delete rows from the Orders table, and then adds the user Jerry to the Sales role.

CREATE ROLE Sales;   
GRANT SELECT ON Object::Sales TO Orders;   
GRANT UPDATE ON Object::Sales TO Orders;   
GRANT DELETE ON Object::Sales TO Orders;   
ALTER ROLE Sales ADD MEMBER Jerry;   

사용 권한 시스템에 대 한 자세한 내용은 참조 하세요. Getting Started with Database Engine Permissions합니다.For more information about the permission system, see Getting Started with Database Engine Permissions.

행 수준 보안 구성Configure row-level security

행 수준 보안 쿼리를 실행 하는 사용자에 따라 데이터베이스의 행에 대 한 액세스를 제한할 수 있도록 합니다.Row-Level Security enables you to restrict access to rows in a database based on the user executing a query. 이 기능은 고객은 자신의 데이터에만 액세스할 수 있습니다 또는 작업 자가 자신의 부서에 관련 된 데이터에만 액세스할 수 있습니다와 같은 시나리오에 유용 합니다.This feature is useful for scenarios like ensuring that customers can only access their own data or that workers can only access data that is pertinent to their department.

다음 단계에서는 두 명의 사용자가 다른 행 수준 액세스를 사용 하 여 설정 하 여 Sales.SalesOrderHeader 테이블입니다.The following steps walk through setting up two Users with different row-level access to the Sales.SalesOrderHeader table.

행 수준 보안을 테스트 하려면 두 개의 사용자 계정을 만듭니다.Create two user accounts to test the row level security:

USE AdventureWorks2014;   
GO   

CREATE USER Manager WITHOUT LOGIN;     

CREATE USER SalesPerson280 WITHOUT LOGIN;    

읽기 액세스 권한을 부여 합니다 Sales.SalesOrderHeader 테이블 모두에 게:Grant read access on the Sales.SalesOrderHeader table to both users:

GRANT SELECT ON Sales.SalesOrderHeader TO Manager;      
GRANT SELECT ON Sales.SalesOrderHeader TO SalesPerson280;    

새 스키마 및 인라인 테이블 반환 함수를 만듭니다.Create a new schema and inline table-valued function. 에 1을 반환 하는 함수를 SalesPersonID 열 ID와 일치할는 SalesPerson 로그인 또는 쿼리를 실행 하는 사용자가 Manager 사용자 경우.The function returns 1 when a row in the SalesPersonID column matches the ID of a SalesPerson login or if the user executing the query is the Manager user.

CREATE SCHEMA Security;   
GO   

CREATE FUNCTION Security.fn_securitypredicate(@SalesPersonID AS int)     
    RETURNS TABLE   
WITH SCHEMABINDING   
AS     
   RETURN SELECT 1 AS fn_securitypredicate_result    
WHERE ('SalesPerson' + CAST(@SalesPersonId as VARCHAR(16)) = USER_NAME())     
    OR (USER_NAME() = 'Manager');    

필터 및 테이블에 대 한 차단 조건자로 함수를 추가 하는 보안 정책을 만듭니다.Create a security policy adding the function as both a filter and a block predicate on the table:

CREATE SECURITY POLICY SalesFilter   
ADD FILTER PREDICATE Security.fn_securitypredicate(SalesPersonID)    
  ON Sales.SalesOrderHeader,   
ADD BLOCK PREDICATE Security.fn_securitypredicate(SalesPersonID)    
  ON Sales.SalesOrderHeader   
WITH (STATE = ON);   

다음 쿼리를 실행 합니다 SalesOrderHeader 각 사용자 테이블입니다.Execute the following to query the SalesOrderHeader table as each user. 확인 SalesPerson280 95는 자신의 판매 하 고 있는 행만 표시 합니다 Manager 테이블의 모든 행을 볼 수 있습니다.Verify that SalesPerson280 only sees the 95 rows from their own sales and that the Manager can see all the rows in the table.

EXECUTE AS USER = 'SalesPerson280';   
SELECT * FROM Sales.SalesOrderHeader;    
REVERT; 

EXECUTE AS USER = 'Manager';   
SELECT * FROM Sales.SalesOrderHeader;   
REVERT;   

정책을 사용하지 않도록 보안 정책을 변경합니다.Alter the security policy to disable the policy. 이제 두 사용자는 모든 행을 액세스할 수 있습니다.Now both users can access all rows.

ALTER SECURITY POLICY SalesFilter   
WITH (STATE = OFF);    

동적 데이터 마스킹 설정Enable dynamic data masking

동적 데이터 마스킹 완전히 또는 부분적으로 특정 열을 마스킹하 여 응용 프로그램의 사용자에 게 중요 한 데이터 노출을 제한할 수 있습니다.Dynamic Data Masking enables you to limit the exposure of sensitive data to users of an application by fully or partially masking certain columns.

사용 하 여는 ALTER TABLE 문에 추가 하는 마스킹 함수를 추가 합니다 EmailAddress 열에는 Person.EmailAddress 테이블:Use an ALTER TABLE statement to add a masking function to the EmailAddress column in the Person.EmailAddress table:

USE AdventureWorks2014;
GO
ALTER TABLE Person.EmailAddress    
ALTER COLUMN EmailAddress    
ADD MASKED WITH (FUNCTION = 'email()');

새 사용자를 만듭니다 TestUser 사용 하 여 SELECT 테이블에 대 한 권한으로 쿼리를 실행 한 다음 TestUser 마스킹된 데이터를 보려면:Create a new user TestUser with SELECT permission on the table, then execute a query as TestUser to view the masked data:

CREATE USER TestUser WITHOUT LOGIN;   
GRANT SELECT ON Person.EmailAddress TO TestUser;    

EXECUTE AS USER = 'TestUser';   
SELECT EmailAddressID, EmailAddress FROM Person.EmailAddress;       
REVERT;    

마스킹 함수에서 첫 번째 레코드에 메일 주소 변경 되는지 확인 합니다.Verify that the masking function changes the email address in the first record from:

EmailAddressIDEmailAddressID EmailAddressEmailAddress
11 ken0@adventure-works.com

intointo

EmailAddressIDEmailAddressID EmailAddressEmailAddress
11 kXXX@XXXX.com

투명한 데이터 암호화 사용Enable Transparent Data Encryption

데이터베이스에 대 한 위협을 하드 드라이브에서 데이터베이스 파일을 도용는 누군가가 위험이 초래 됩니다.One threat to your database is the risk that someone will steal the database files off of your hard-drive. 이 파일 (예: 랩톱)를 포함 하는 컴퓨터의 도용 또는 문제 직원의 동작을 통해 시스템에 대 한 관리자 권한 액세스를 가져오는 경우가 침입을 사용 하 여 발생할 수 있습니다.This could happen with an intrusion that gets elevated access to your system, through the actions of a problem employee, or by theft of the computer containing the files (such as a laptop).

Transparent Data Encryption (TDE)는 하드 드라이브에 저장 된 데이터 파일을 암호화 합니다.Transparent Data Encryption (TDE) encrypts the data files as they are stored on the hard drive. Master 데이터베이스는 SQL Server 데이터베이스 엔진에 암호화 키를 있으므로 데이터베이스 엔진 데이터를 조작할 수 있습니다.The master database of the SQL Server database engine has the encryption key, so that the database engine can manipulate the data. 키에 액세스 하지 않고 데이터베이스 파일을 읽을 수 없습니다.The database files cannot be read without access to the key. 고급 관리자를 관리 하 고 백업 하 고 데이터베이스를 이동할 수 있지만 선택한 사람에 의해서만 키를 다시 만들 수 있습니다.High-level administrators can manage, backup, and recreate the key, so the database can be moved, but only by selected people. TDE를 구성 하는 경우는 tempdb 데이터베이스도 자동으로 암호화 됩니다.When TDE is configured, the tempdb database is also automatically encrypted.

데이터베이스 엔진 데이터를 읽을 수 있으므로 투명 한 데이터 암호화 직접 메모리를 읽을 하거나 관리자 계정을 통해 SQL Server에 액세스할 수 있는 컴퓨터의 관리자가 무단된 액세스 로부터 보호 하지 않습니다.Since the Database Engine can read the data, Transparent Data Encryption does not protect against unauthorized access by administrators of the computer who can directly read memory, or access SQL Server through an administrator account.

TDE를 구성 합니다.Configure TDE

  • 마스터 키 만들기Create a master key
  • 마스터 키로 보호되는 인증서를 만들거나 얻기Create or obtain a certificate protected by the master key
  • 데이터베이스 암호화 키를 만들고 인증서로 키 보호Create a database encryption key and protect it by the certificate
  • 암호화를 사용하도록 데이터베이스 설정Set the database to use encryption

TDE를 구성 하려면 CONTROL master 데이터베이스에 대 한 권한 및 CONTROL 사용자 데이터베이스에 대 한 권한이 있습니다.Configuring TDE requires CONTROL permission on the master database and CONTROL permission on the user database. 일반적으로 관리자는 TDE를 구성합니다.Typically an administrator configures TDE.

다음 예에서는 AdventureWorks2014 라는 서버에 설치된 인증서를 사용하여 MyServerCert데이터베이스를 암호화하고 암호를 해독하는 방법을 보여 줍니다.The following example illustrates encrypting and decrypting the AdventureWorks2014 database using a certificate installed on the server named MyServerCert.

USE master;  
GO  

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '**********';  
GO  

CREATE CERTIFICATE MyServerCert WITH SUBJECT = 'My Database Encryption Key Certificate';  
GO  

USE AdventureWorks2014;  
GO

CREATE DATABASE ENCRYPTION KEY  
WITH ALGORITHM = AES_256  
ENCRYPTION BY SERVER CERTIFICATE MyServerCert;  
GO

ALTER DATABASE AdventureWorks2014  
SET ENCRYPTION ON;   

TDE를 제거 하려면 실행 ALTER DATABASE AdventureWorks2014 SET ENCRYPTION OFF;To remove TDE, execute ALTER DATABASE AdventureWorks2014 SET ENCRYPTION OFF;

암호화 및 암호 해독 작업은 SQL Server가 백그라운드 스레드에서 예약 됩니다.The encryption and decryption operations are scheduled on background threads by SQL Server. 이 항목의 뒷부분에 나오는 카탈로그 뷰 및 동적 관리 뷰를 사용하여 이러한 작업의 상태를 볼 수 있습니다.You can view the status of these operations using the catalog views and dynamic management views in the list that appears later in this topic.

경고

TDE가 사용된 데이터베이스의 백업 파일도 데이터베이스 암호화 키를 사용하여 암호화됩니다.Backup files of databases that have TDE enabled are also encrypted by using the database encryption key. 따라서 이러한 백업 파일을 복원하려면 데이터베이스 암호화 키를 보호하는 인증서를 사용할 수 있어야 합니다.As a result, when you restore these backups, the certificate protecting the database encryption key must be available. 즉, 데이터베이스 백업뿐만 아니라 데이터 손실을 방지하기 위해 서버 인증서의 백업도 유지 관리해야 합니다.This means that in addition to backing up the database, you have to make sure that you maintain backups of the server certificates to prevent data loss. 인증서를 더 이상 사용할 수 없을 경우 데이터 손실이 발생합니다.Data loss will result if the certificate is no longer available. 자세한 내용은 SQL Server Certificates and Asymmetric Keys을 참조하세요.For more information, see SQL Server Certificates and Asymmetric Keys.

TDE에 대 한 자세한 내용은 참조 하세요. Transparent Data Encryption (TDE)합니다.For more information about TDE, see Transparent Data Encryption (TDE).

백업 암호화를 구성 합니다.Configure backup encryption

SQL Server에는 백업을 만드는 동안 데이터를 암호화 하는 기능이 있습니다.SQL Server has the ability to encrypt the data while creating a backup. 암호화 알고리즘 및 암호기 (인증서 또는 비대칭 키)를 지정 하 여 백업을 만들 경우에 암호화 된 백업 파일을 만들 수 있습니다.By specifying the encryption algorithm and the encryptor (a certificate or asymmetric key) when creating a backup, you can create an encrypted backup file.

경고

인증서나 비대칭 키를 백업하는 것이 매우 중요하며, 이때 가급적이면 인증서나 비대칭 키를 사용하여 암호화한 백업 파일과 다른 위치에 백업하는 것이 좋습니다.It is very important to back up the certificate or asymmetric key, and preferably to a different location than the backup file it was used to encrypt. 인증서나 비대칭 키가 없으면 백업을 복원할 수 없으므로 백업 파일을 사용할 수 없게 됩니다.Without the certificate or asymmetric key, you cannot restore the backup, rendering the backup file unusable.

다음 예제에서는 인증서를 만들고 인증서로 보호 되는 백업을 만듭니다.The following example creates a certificate, and then creates a backup protected by the certificate.

USE master;  
GO  
CREATE CERTIFICATE BackupEncryptCert   
   WITH SUBJECT = 'Database backups';  
GO 
BACKUP DATABASE [AdventureWorks2014]  
TO DISK = N'/var/opt/mssql/backups/AdventureWorks2014.bak'  
WITH  
  COMPRESSION,  
  ENCRYPTION   
   (  
   ALGORITHM = AES_256,  
   SERVER CERTIFICATE = BackupEncryptCert  
   ),  
  STATS = 10  
GO  

자세한 내용은 백업 암호화합니다.For more information, see Backup Encryption.

다음 단계Next steps

SQL Server의 보안 기능에 대 한 자세한 내용은 참조 SQL Server 데이터베이스 엔진 및 Azure SQL Database에 대 한 보안 센터합니다.For more information about the security features of SQL Server, see Security Center for SQL Server Database Engine and Azure SQL Database.