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

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. 이 예제 데이터베이스를 설치 하는 방법에 지침은 Linux에 Windows에서 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 above.

로그인은 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   

이제 로그인 Jerry 수 로그인 이상 만들고 사용자 Jerry 수 있는 더 많은 사용자가 만들 합니다.Now the login Jerry 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.

(권장 사항) 데이터를 보다 정확 하 게 액세스를 구성 하려면 준비가 되 면 사용 하 여 사용자 고유의 사용자 정의 데이터베이스 역할을 만들 나중 역할 만들기 문.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;   

권한 시스템에 대 한 자세한 내용은 참조 데이터베이스 엔진 권한 시작합니다.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 steps below 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()');

새 사용자 만들기 TestUserSELECT 테이블에 대 한 권한으로 쿼리를 실행 합니다 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
1.1 ken0@adventure-works.com

intointo

EmailAddressIDEmailAddressID EmailAddressEmailAddress
1.1 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).

투명 한 데이터 암호화 (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에 대 한 자세한 내용은 참조 투명 한 데이터 암호화 (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 데이터베이스에 대 한 보안 센터합니다.For more information about the security features of SQL Server, see Security Center for SQL Server Database Engine and Azure SQL Database.