Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Suy ngẫm về bảo mật của máy chủ SQL

DBA là người giám hộ dữ liệu và có hai khía cạnh của việc trở thành người giám hộ. Điều đầu tiên là tính chính trực. Nó bao gồm các tác vụ như kiểm tra tính nhất quán của cơ sở dữ liệu, tạo bản sao lưu và nếu có bất kỳ sự cố nào xuất hiện, có một kế hoạch khôi phục cơ sở dữ liệu toàn diện, được thiết kế tốt.

Khía cạnh thứ hai là bảo mật. Nó gợi ý rằng hãy đảm bảo rằng chỉ những người dùng được ủy quyền mới có quyền truy cập vào dữ liệu và chỉ những dữ liệu mà họ cần.

Bạn có thể tìm thấy nhiều tài nguyên dành riêng cho bảo mật trên Web. Tuy nhiên, tôi nghĩ rằng một số điều quan trọng thiếu sự quan tâm thích đáng. Trong bài viết này, tôi muốn tập trung vào các tùy chọn này và giải thích tại sao điều quan trọng là phải nhận thức được chúng và xử lý chúng một cách chính xác.

Sứ mệnh thỏa hiệp với máy chủ SQL

Hãy có một Trò chơi nhập vai trong đó bạn là Đặc vụ bí mật và nhiệm vụ của bạn, nếu bạn chấp nhận nó, là đánh cắp Dữ liệu Rất quan trọng từ TargetDB cơ sở dữ liệu được lưu trữ bởi máy chủ SQL. Bạn cần lấy và xóa dữ liệu này.

Có thể có được Đăng nhập cho bạn, nhưng mọi thông tin đăng nhập trên máy chủ đều có quyền DENIED rõ ràng trên cơ sở dữ liệu và dữ liệu đích. Thông tin duy nhất mà đại lý của chúng tôi có thể cung cấp cho bạn là thông tin được tạo để xác minh bởi giao thức bảo mật trong quá trình tạo thông tin đăng nhập của bạn.

Thông tin cơ sở dữ liệu từ máy chủ đích.

Quyền của máy chủ:

Quyền đối với cơ sở dữ liệu:

Như mọi người đại diện tử tế, chúng ta hãy làm bài tập về nhà và kiểm tra xem bạn đang giải quyết vấn đề gì.

Bạn không thể chỉ đăng nhập và kết nối với TargetDB , vì mọi quyền đơn lẻ đều bị từ chối đối với thông tin đăng nhập của bạn và người dùng được ánh xạ của nó một cách rõ ràng. Bạn cần truy cập từ cơ sở dữ liệu khác.

Một cánh cửa đã khóa

Các hành động trên nhiều cơ sở dữ liệu không phải là điều dễ dàng thực hiện. Hãy coi nó như một cánh cửa đóng với hai ổ khóa trên đó. Chúng tôi sẽ không tập trung vào chi tiết kỹ thuật ở đây, nhưng bạn có thể tham khảo bài viết Mở rộng mạo danh cơ sở dữ liệu bằng cách sử dụng EXECUTE AS MSDN (tôi thực sự khuyên bạn nên làm như vậy).

Khóa đầu tiên là Tin tưởng trình xác thực và thứ hai là Tin tưởng vào cơ sở dữ liệu .

Hãy bắt đầu với ổ khóa đầu tiên. Tin tưởng trình xác thực có nghĩa là để truy cập vào cơ sở dữ liệu B khác, chủ sở hữu cơ sở dữ liệu A phải được cấp (rõ ràng hoặc ngầm định) AUTHENTICATE quyền trong cơ sở dữ liệu B.

Đợi tí! Trình xác thực ở cấp cơ sở dữ liệu là chủ sở hữu của chính cơ sở dữ liệu đó (Không trộn nó với db_owner vai trò cơ sở dữ liệu!).

Kiểm tra chủ sở hữu cơ sở dữ liệu:

Mặc dù họ tuân theo thực tiễn khá tốt bằng cách sử dụng một tài khoản trên mỗi máy chủ, điều này không phải là SA , bằng cách này, họ đã vui lòng mở ổ khóa đầu tiên cho bạn.

Hãy tập trung vào khóa thứ hai.

Bằng cách nào đó, bạn cần tạo cơ sở dữ liệu trên máy chủ với TRUSTWORTHY thuộc tính BẬT . Phương pháp hay nhất ở đây là đặt thuộc tính cơ sở dữ liệu TRUSTWORTHY thành TẮT .

Đây là lúc chúng ta nên nói:điều gì sẽ xảy ra nếu bạn đã có một cơ sở dữ liệu như vậy?

Đây là cơ sở dữ liệu MSDB.

Khóa thứ hai đã xong. Bạn thậm chí không cần phải phá bất kỳ ổ khóa nào.

Tầm quan trọng của vai trò db_owner

Ngay bây giờ, bạn phải đối phó với một thách thức. Bằng cách nào đó, bạn cần truy cập vào cơ sở dữ liệu MSDB với db_owner vai trò cơ sở dữ liệu bởi vì nó có quyền ngầm, mạo danh.

Vì MSDB thường không nằm trong trọng tâm của quản trị viên cơ sở dữ liệu, nên nhiệm vụ này không phải là không thể nữa. Hãy xem những gì bạn có thể làm chỉ vì bạn có một người dùng với db_owner vai trò cơ sở dữ liệu trong cơ sở dữ liệu MSDB:

Cố gắng kết nối với TargetDB :

Đây là một lỗi mong đợi. Hãy nhớ giao thức bảo mật được áp dụng trên thông tin đăng nhập được cung cấp. Hãy bắt đầu nó.

Cố gắng kết nối với TargetDB và để chọn dữ liệu mục tiêu:

Nó hoạt động! Hãy sửa đổi nó và sau đó xác minh hành động.

Đó là tất cả.

Nhiệm vụ đã hoàn thành.

Như bạn đã thấy, tôi tập trung vào một tổ hợp cấu hình cơ sở dữ liệu bảo mật cụ thể. Đó là chủ sở hữu của cơ sở dữ liệu và TRUSTWORTHY tùy chọn cơ sở dữ liệu đặc biệt chú ý đến MSDB. Kịch bản được trình bày chỉ là một kịch bản trong đó dữ liệu nhạy cảm có thể bị xâm phạm theo cách tương tự. Bây giờ chúng ta hãy xem xét một tình huống có thể xảy ra khác.

Chủ sở hữu cơ sở dữ liệu + TRUSTWORTHY

Chúng ta hãy kiểm tra chi tiết cơ bản bắt đầu với vấn đề nổi tiếng:quyền sở hữu cơ sở dữ liệu. Chủ sở hữu (các) cơ sở dữ liệu của bạn nên sử dụng chi tiết đăng nhập nào? Rất nhiều người nói rằng SA là một lựa chọn thích hợp.

Tôi đã tìm kiếm nhanh trên Google và tìm thấy các câu trả lời như những câu sau:

“Tôi không nhớ đây là mối quan tâm của tôi bao giờ. Ngoại trừ việc trông khó chịu trong các báo cáo hoặc không thể xóa người dùng nếu họ sở hữu cơ sở dữ liệu, nhưng tôi không nghĩ điều đó ảnh hưởng đến hoạt động của máy chủ. Bạn chỉ có thể chọn sa để có tính nhất quán. ”

Hoặc

“Tôi không nghĩ rằng việc sở hữu cơ sở dữ liệu của SA hoặc bất kỳ người dùng nào khác nên có bất kỳ mối quan tâm nào. Điều quan trọng là ai đang thực hiện "cái gì" trong cơ sở dữ liệu của bạn. Vì vậy, bạn nên tạo người dùng có các đặc quyền hợp lệ. Để đơn giản, bạn có thể chỉ định chủ sở hữu là SA. ”

Tình hình hiện tại là việc sử dụng tài khoản SA làm chủ sở hữu cơ sở dữ liệu là một cách TỐT NHẤT . Cá nhân tôi nghĩ điều này nên được đánh dấu trên mọi blog và trong mọi tài liệu, liên quan đến chủ đề này.

Nếu chúng tôi tạo người dùng chỉ với các đặc quyền hợp lệ, vậy là đủ, nhưng thật không may, đây không phải là cách mọi thứ thường hoạt động. Bạn cần chuẩn bị cho những tình huống ‘xấu nhất có thể xảy ra’. Hãy nghĩ xem, chúng ta có thể làm gì trong các ví dụ trước đây nếu chủ sở hữu cơ sở dữ liệu mặc định là SA !

Hãy tiếp tục với tùy chọn thứ hai, TRUSTWORTHY tùy chọn cơ sở dữ liệu. Tình hình khá hơn một chút nhưng vẫn gặp sự cố chung. Như thường được coi là phương pháp hay nhất ở đây là Đặt Thuộc tính cơ sở dữ liệu 'Đáng tin cậy' thành Tắt . Chúng tôi vừa mới biết lý do tại sao tùy chọn này không tốt .

Nhưng đây không phải là tất cả. Nếu bạn cố gắng tìm một số tập lệnh để kiểm tra thuộc tính này, bạn có thể sẽ tìm thấy một tập lệnh tương tự như sau:

SELECT name FROM sys.databases WHERE is_trustworthy_on = 1 AND name != 'msdb'

sp_Blitz script kiểm tra tình trạng SQL Server cũng kiểm tra cài đặt mặc định của cơ sở dữ liệu (bao gồm TRUSTWORTHY làm giá trị mặc định là 0) và báo cáo mọi cơ sở dữ liệu có cài đặt không mặc định. Tuy nhiên, tập lệnh bỏ qua cơ sở dữ liệu hệ thống.

Hơn nữa, có một bài báo MS KB, tập trung vào chủ đề này. Tham khảo hướng dẫn sử dụng cài đặt cơ sở dữ liệu TRUSTWORTHY trong SQL Server:

Có một mẫu mã trong bài viết, liệt kê các cơ sở dữ liệu có bit TRUSTWORTHY BẬT và chủ sở hữu cơ sở dữ liệu có vai trò máy chủ sysadmin:

SELECT SUSER_SNAME(owner_sid) AS DBOWNER, d.name AS DATABASENAME
FROM sys.server_principals r
INNER JOIN sys.server_role_members m ON r.principal_id = m.role_principal_id
INNER JOIN sys.server_principals p ON
p.principal_id = m.member_principal_id
inner join sys.databases d on suser_sname(d.owner_sid) = p.name
WHERE is_trustworthy_on = 1 AND d.name NOT IN ('MSDB') and r.type = 'R' and r.name = N'sysadmin'

Điều gì phổ biến trong các tập lệnh này? Mỗi tập lệnh không bao gồm MSDB, nhưng như bài viết MS KB lưu ý, bạn vừa thấy nó trong “sứ mệnh” của chúng tôi:

Lưu ý :Theo mặc định, cài đặt TRUSTWORTHY được đặt thành BẬT cho cơ sở dữ liệu MSDB. Việc thay đổi cài đặt này từ giá trị mặc định của nó có thể dẫn đến hành vi không mong muốn bởi các cấu phần SQL Server sử dụng cơ sở dữ liệu MSDB.

Tôi muốn nhấn mạnh rằng trọng tâm chính của phần này không phải là tùy chọn cơ sở dữ liệu TRUSTWORTHY hay bản thân tài sản của chủ sở hữu cơ sở dữ liệu, mà là sự kết hợp của hai tùy chọn này. Tôi chủ yếu tập trung vào MSDB vì cài đặt TRUSTWORTHY được đặt thành BẬT cho cơ sở dữ liệu MSDB theo mặc định.

Kết luận

Đó là tất cả cho bây giờ. Chúng tôi đã xem qua và kiểm tra các tình huống thực tế liên quan đến bảo mật SQL Server. Chúng tôi cũng đã xem xét các tùy chọn cơ sở dữ liệu quan trọng như vậy, với tư cách là chủ sở hữu của cơ sở dữ liệu và cài đặt cơ sở dữ liệu TRUSTWORTHY.

Tôi chỉ muốn tập trung vào các tùy chọn này - vì chúng rất quan trọng, đặc biệt là khi chúng ta nói về chúng kết hợp với nhau.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Phiên bản mới nhất của SQL Server, Phiên bản &Lịch sử Máy chủ SQL

  2. JPA SQL Server Không ánh xạ phương ngữ cho loại JDBC:-9

  3. SQL Server - Giá trị trả về sau khi CHÈN

  4. Sửa kế hoạch tự động trong SQL Server

  5. Cách tạo ràng buộc khóa ngoại với tùy chọn ON DELETE SET NULL trong SQL Server - Hướng dẫn sử dụng SQL Server / TSQL Phần 81