Bảo mật máy chủ chủ yếu phụ thuộc vào cách bạn có thể định cấu hình quyền truy cập trên các đối tượng một cách chính xác. Việc cung cấp cho người dùng quá nhiều quyền có thể gây ra nhiều vấn đề. Không, người dùng sẽ không sử dụng lỗi của bạn. Thay vào đó, bất kỳ hacker nào hoặc tôi sẽ làm điều này. Trong trường hợp này, bạn có thể quên các bảng chứa dữ liệu hoặc toàn bộ cơ sở dữ liệu của mình.
Vì lý do nào đó, bảo mật của cơ sở dữ liệu là bảo vệ từ bên ngoài, chẳng hạn như tin tặc. Tuy nhiên, điều này rất hiếm khi xảy ra. Tôi là một lập trình viên trong một công ty lớn và một quản trị viên thậm chí không nghĩ đến việc bảo vệ các cổng máy chủ, nơi mọi thứ đều mở. Có rất nhiều cơ sở dữ liệu, chương trình và thậm chí cả một máy chủ FTP trên một máy chủ duy nhất và nó chưa bao giờ bị tấn công trong 5 năm qua. May mắn thay, tôi đã thuyết phục quản trị viên triển khai máy chủ WEB trên một phần cứng riêng biệt. Nếu không, nếu ai đó biết địa chỉ IP của máy chủ chính của chúng tôi, thì bất kỳ kẻ gian lận nào cũng có thể hack được. Cả cơ sở dữ liệu và Windows đều không được vá trong vài năm.
Tuy nhiên, các vấn đề nội bộ phát sinh hàng ngày do chính sách bảo mật không chính xác. Tất cả người dùng đăng nhập với quyền quản trị viên và có thể tạo bất kỳ thứ gì họ muốn. Đây là một vấn đề thực sự vì sự cho phép quá mức cho phép những người lười biếng thể hiện tình trạng mù chữ hoàn toàn của họ. Do đó, chúng tôi sẽ xem xét tính bảo mật bất kể mối đe dọa đến từ đâu - từ tin tặc hay từ người dùng.
Trong bài viết này, chúng ta sẽ xem xét tất cả những điều cơ bản cần thiết về bảo vệ an ninh khỏi cả tin tặc và người dùng. Tôi chọn MS SQL Server làm ví dụ vì nó chứa mọi thứ có sẵn trong các cơ sở dữ liệu khác (Oracle, MySQL, v.v.) và có thêm khả năng quản lý bảo mật. Ai đó có thể nghĩ rằng điều này làm cho MS dốc hơn. Tuy nhiên, đôi khi, các tính năng bổ sung có thể quá mức, gây ra sự cố.
Vai trò máy chủ
Trong Windows và các hệ điều hành khác, có các nhóm và người dùng để quản lý quyền. Chúng tôi có thể kết hợp người dùng thành một nhóm và cấp quyền cho tất cả họ cùng một lúc, điều này dễ dàng hơn nhiều so với việc gán quyền cho từng người dùng riêng lẻ. Vì những mục đích này, trong cơ sở dữ liệu, có khái niệm “vai trò”.
Giả sử rằng 100 người dùng có quyền đọc dữ liệu từ một bảng cụ thể. Để cung cấp cho mỗi người dùng quyền này là một điều phiền toái. Việc tạo một vai trò được phép đọc và sau đó thêm tất cả những người dùng cần thiết vào nó sẽ đơn giản hơn nhiều. Kết quả tương tự với việc phân nhóm.
Trong SQL Server, có hai loại vai trò:máy chủ và cơ sở dữ liệu. Vai trò máy chủ được xác định trước và không thể thay đổi.
Mở nhánh vai trò Bảo mật / Máy chủ trong Trình quản lý doanh nghiệp để bạn có thể xem danh sách các vai trò hiện có ở phần bên phải của cửa sổ. Mô tả xác định những gì người dùng có thể làm với vai trò tương ứng.
Vai trò máy chủ trong MS SQL Server và cửa sổ trình quản lý vai trò
Để thêm người dùng hiện có vào một vai trò, hãy bấm đúp vào hàng vai trò. Trong cửa sổ xuất hiện, bạn có thể thêm người dùng vào vai trò hoặc xóa họ. Tab Quyền mô tả chi tiết những gì mỗi người dùng có thể làm.
Người dùng
Để quản lý người dùng, hãy mở nhánh Bảo mật / Đăng nhập trong Trình quản lý doanh nghiệp. Ở phần bên phải, bạn sẽ thấy danh sách tất cả người dùng máy chủ. Theo mặc định, quyền truy cập được cấp cho quản trị viên miền và các tài khoản đăng nhập tích hợp như sa.
Để thêm người dùng mới, hãy nhấp chuột phải vào bất kỳ đâu trong phần trống bên phải của cửa sổ và chọn Đăng nhập mới trong menu xuất hiện. Ở đầu cửa sổ, hãy chọn tên người dùng. Nếu bạn cần chọn một miền hoặc người dùng máy tính hiện có, hãy nhấp vào nút (…) ở bên phải của trường nhập và bạn sẽ thấy hộp tìm kiếm người dùng trong miền.
Thêm người dùng mới
Dưới đây, bạn có thể chọn loại xác thực - Windows hoặc SQL Server. Nếu bạn chọn Windows, bạn không cần chỉ định mật khẩu vì máy chủ sẽ tìm nạp mật khẩu đó từ hệ thống. Tuy nhiên, bạn có thể chuyển đổi Cấp quyền truy cập (cho phép truy cập) hoặc Từ chối quyền truy cập (cấm). Trong trường hợp sau, người dùng sẽ được đăng ký trong cơ sở dữ liệu, nhưng họ sẽ không thể kết nối - điều này bị cấm.
Nếu bạn chọn xác thực SQL Server, bạn sẽ cần đặt mật khẩu vì trong trường hợp này, mật khẩu sẽ được lưu trữ trong các bảng hệ thống của máy chủ cơ sở dữ liệu. Xin lưu ý rằng ngay cả khi chỉ xác thực Windows được chỉ định trong cài đặt máy chủ, bạn có thể tạo bản ghi máy chủ SQL, nhưng bạn sẽ không thể đăng nhập vào hệ thống bằng các bản ghi này.
Trên tab Vai trò máy chủ, bạn có thể chỉ định vai trò máy chủ nào sẽ được cấp cho người dùng. Do đó, ngay cả ở giai đoạn tạo, bạn có thể thêm người dùng vào các vai trò cần thiết.
Quyền truy cập của người dùng vào cơ sở dữ liệu
Trên tab Truy cập Cơ sở dữ liệu, chỉ định cơ sở dữ liệu mà người dùng có thể làm việc với. Ở đây, cửa sổ được chia thành hai phần:ở nửa trên, bạn có thể chọn cơ sở dữ liệu mà quyền truy cập được phép truy cập và trong danh sách dưới cùng, bạn có thể chọn vai trò cơ sở dữ liệu. Vai trò này trong cơ sở dữ liệu sẽ xác định các quyền của người dùng. Một số vai trò có thể được cấp cho một người dùng.
Tạo một tài khoản qq, tài khoản này sẽ có quyền truy cập vào cơ sở dữ liệu Northwind. Đây là cơ sở dữ liệu thử nghiệm tiêu chuẩn được tạo khi triển khai máy chủ.
Lưu các thay đổi.
Bây giờ, hãy mở nhánh Databases / Northwind / Users và xem danh sách những người dùng được phép truy cập vào cơ sở dữ liệu đã chọn. Xin lưu ý rằng có tài khoản qq ở đây. Không có tài khoản trong các cơ sở dữ liệu khác vì quyền truy cập vào chúng đối với người dùng mới của chúng tôi bị cấm.
Vai trò cơ sở dữ liệu
Mỗi cơ sở dữ liệu có thể có các vai trò riêng, xác định các quyền truy cập trên các đối tượng. Nhiều quản trị viên không thích bận tâm với các quyền này. Do đó, họ cài đặt công khai mặc định được tích hợp sẵn, cho phép hầu hết mọi thứ. Nếu thiếu quyền cho vai trò công khai, chỉ cần thêm người dùng vào vai trò máy chủ Quản trị viên hệ thống. Trong trường hợp này, cơ sở dữ liệu trở nên dễ bị tấn công.
Mỗi người dùng phải được cung cấp các quyền cần thiết và riêng của họ. Những gì không được phép phải bị cấm. Các vai trò đã tồn tại trên máy chủ không được sử dụng vì quyền của chúng được mở cho tất cả mọi người. Bạn nên xóa tất cả chúng, đặc biệt là công khai.
Tạo vai trò
Để tạo một vai trò cơ sở dữ liệu mới, hãy bấm chuột phải vào nhánh Cơ sở dữ liệu / Tên cơ sở dữ liệu / Vai trò. Trong menu xuất hiện, chọn Vai trò cơ sở dữ liệu mới. Thuộc tính Vai trò Cơ sở dữ liệu - Cửa sổ Vai trò mới mở ra. Ở phần trên của cửa sổ, hãy nhập tên vai trò.
Ví dụ, chúng tôi muốn tạo một vai trò cho nhân viên kế toán. Để thực hiện việc này, hãy nhập Buh vào trường Tên.
Tạo vai trò cơ sở dữ liệu
Dưới đây, chọn một loại vai trò, ví dụ, một loại mặc định tiêu chuẩn. Ở giữa cửa sổ, có một danh sách những người dùng sẽ được thêm vào vai trò. Cho đến nay, danh sách này trống rỗng. Tuy nhiên, nếu chúng tôi nhấp vào Thêm, chúng tôi sẽ thêm người dùng, ví dụ, vào tài khoản qq đã tạo trước đó. Không có gì khác phải được thực hiện ở giai đoạn tạo ra một vai trò. Lưu các thay đổi bằng cách nhấp vào OK.
Quyền truy cập
Bây giờ, chúng ta sẽ xem cách chúng ta có thể đặt quyền. Bấm đúp vào vai trò Buh đã tạo để mở cửa sổ chỉnh sửa. Xin lưu ý rằng nút Quyền hiện có sẵn. Chỉ khi vai trò được đăng ký trong cơ sở dữ liệu, chúng tôi mới có thể thay đổi quyền của nó. Nhấp vào nút này để mở cửa sổ Thuộc tính Vai trò Cơ sở dữ liệu.
Đặt quyền truy cập cho các vai trò
Ở đầu cửa sổ, có một danh sách các vai trò cơ sở dữ liệu để bạn có thể nhanh chóng chuyển đổi giữa chúng. Bây giờ, vai Buh đã được chọn. Ở giữa cửa sổ, có một lưới lớn với các cột sau:
- Đối tượng - tên của các đối tượng;
- Chủ sở hữu - chủ sở hữu của một đối tượng;
- SELECT - quyền xem dữ liệu hoặc thực thi câu lệnh SELECT. Nó chỉ có sẵn cho bảng và chế độ xem;
- INSERT - quyền thêm dữ liệu hoặc thực hiện câu lệnh INSERT. Nó chỉ có sẵn cho bảng và chế độ xem;
- CẬP NHẬT - quyền sửa đổi dữ liệu hoặc thực thi câu lệnh CẬP NHẬT. Nó chỉ có sẵn cho bảng và chế độ xem;
- Quyền DELETE để xóa dữ liệu hoặc thực hiện câu lệnh DELETE. Nó chỉ có sẵn cho bảng và chế độ xem;
- EXEC - quyền thực thi các thủ tục và chức năng được lưu trữ. Nó chỉ có sẵn cho các thủ tục và chức năng được lưu trữ;
- DRI (toàn vẹn tham chiếu khai báo). Nó chỉ có sẵn cho bảng, dạng xem và các hàm.
Không có quyền cho vai trò mới. Để có thể xem một bảng, chẳng hạn như Danh mục, hãy chọn hộp ở giao điểm của hàng Danh mục và cột CHỌN. Bạn sẽ thấy một dấu tích màu xanh lá cây trong hộp, có nghĩa là một sự cho phép. Lần nhấp thứ hai thay đổi dấu tích thành dấu thập đỏ và có nghĩa là cấm. Điều này có thể cần thiết nếu bạn cấp quyền cho người dùng và thêm họ vào một vai trò khác, nơi cho phép quyền truy cập vào hành động đã chọn. Nhấp chuột thứ ba loại bỏ mọi quyền đối với hành động và để trống hộp. Điều này có nghĩa là không có quyền truy cập; tuy nhiên, nó có thể được ủy quyền nếu người dùng được thêm vào một vai trò khác với các quyền trên đối tượng hoặc các quyền được chỉ định rõ ràng.
Nếu bạn chọn một hàng có đối tượng là bảng hoặc dạng xem, nút Cột sẽ có sẵn ở cuối cửa sổ. Giả sử rằng bạn đã chọn bảng và nhấp vào nút này. Cửa sổ mở ra, trong đó bạn có thể đặt quyền cho các cột bảng riêng lẻ.
Đặt quyền cho cột
Đây thực sự là một khả năng tuyệt vời vì một số cột chịu trách nhiệm về tính toàn vẹn của cơ sở dữ liệu không được thay đổi bởi người dùng hoặc tin tặc. Tốt hơn là nên cấm các thao tác CẬP NHẬT hoặc CHỌN (nếu có thể) đối với các cột này.
Chủ nghĩa cá nhân
Vai trò thuận tiện sử dụng khi cần kết hợp những người dùng tương tự. Ví dụ, nhiều kế toán cần truy cập vào các bảng tài chính. Để cấp quyền cho từng kế toán rất tốn thời gian. Việc tạo một vai trò cho người kế toán, cấp quyền cho nó và sau đó thêm tất cả các tài khoản kế toán vào vai trò này sẽ dễ dàng hơn nhiều.
Tuy nhiên, có những trường hợp các quyền phải là duy nhất cho một người dùng hoặc ngoài các quyền được cấp bởi vai trò, cần phải cấp thêm các quyền khác. Ví dụ, một trong những nhân viên kế toán cần có quyền truy cập vào các bảng của bộ phận nhân sự. Trong trường hợp này, tốt hơn là thêm quyền trực tiếp cho kế toán thay vì tạo một vai trò mới.
Chúng tôi tìm hiểu các vai trò trước để làm quen với chúng. Trong hầu hết các trường hợp, có một tài khoản riêng cho nhân viên kế toán, một tài khoản riêng cho nhà kinh tế học, v.v. Trong trường hợp này, hầu hết mọi người kết nối với máy chủ bằng một tài khoản. Như vậy, để kiểm soát ai làm điều gì là không thể. Tốt hơn là sử dụng các quyền riêng lẻ khi cần thiết, trong khi mỗi người dùng phải có tài khoản riêng của họ.
Quyền trên bảng
Hãy xem cách chúng tôi có thể cấp quyền trên các đối tượng cụ thể, chẳng hạn như trên bảng.
Chọn nhánh Databases / Northwind / Tables trong cây đối tượng. Ở phần bên phải, danh sách tất cả các bảng sẽ mở ra. Nhấp chuột phải vào bất kỳ bảng nào và chọn Tất cả tác vụ / Quản lý quyền. Cửa sổ Thuộc tính Quyền sẽ mở ra, tương tự như cửa sổ Thuộc tính Vai trò Cơ sở dữ liệu với danh sách người dùng thay vì danh sách các đối tượng. Đối tượng là một bảng mà chúng tôi đã nhấp vào và tên của nó sẽ được liệt kê trong menu thả xuống của cửa sổ. Bây giờ, chúng ta cần đặt quyền trên đối tượng này cho những người dùng khác nhau.
Đặt quyền trên bảng
Danh sách các quyền như sau:xem, cập nhật, thêm, xóa, thực thi và quản lý. Nếu bạn nhấp vào nút Cột, cửa sổ sẽ mở ra để đặt quyền trên đối tượng ở cấp trường bảng cho một người dùng cụ thể.
Lượt xem
Chúng tôi có hai bảng. Một trong số đó lưu trữ danh sách nhân viên, trong khi một bảng khác chứa thông tin về số giờ làm việc mỗi tháng và mức lương nhận được (lương chính thức và ẩn).
Giả sử rằng một quan chức thuế đến gặp bạn và yêu cầu cho biết mức lương của người lao động. Ngoài ra, họ hỏi bạn đã nộp đủ các loại thuế chưa. Bạn cần thực hiện những hành động nào về phía mình?
Đề xuất đầu tiên đến từ hàng thứ ba - để tạo một người dùng mới được phép đọc các bảng bao gồm danh sách nhân viên và tiền lương. Ngoài ra, bạn cũng đừng quên đóng cột với mức lương ẩn. Trên thực tế, giải pháp là đúng nhưng hoàn toàn không hiệu quả.
Tùy chọn tốt nhất là tạo một dạng xem, một truy vấn SQL chọn dữ liệu. Trong cơ sở dữ liệu, nó trông giống như một bảng. Bạn có thể chọn dữ liệu SQL bằng cách sử dụng truy vấn và cấp quyền. Nó chỉ ra rằng truy vấn sẽ được thực thi đối với truy vấn.
Để tạo một dạng xem, hãy chạy truy vấn sau:
TẠO XEM các trường ASSELECT lương cho công chức thuếBây giờ, có một đối tượng Wage mới trong nhánh Databases / Northwind / Views. Nếu bạn nhấp chuột phải vào nó và chọn Tất cả tác vụ / Quản lý quyền, cửa sổ cấp quyền sẽ mở ra. Đặt quyền cho nhân viên thuế và lưu nó. Để xem lại nội dung của dạng xem, hãy chạy truy vấn:
CHỌN * TỪ tiền lươngNhư bạn có thể thấy, có một quyền truy cập vào một bảng đơn giản. Các quan chức thuế cũng sẽ nghĩ rằng họ nhìn thấy dữ liệu thực tế. Tuy nhiên, trên thực tế, truy vấn này sẽ chỉ chứa dữ liệu mà chúng tôi cần.
Ngoài đời, cán bộ thuế không thể bị lừa một cách dễ dàng như vậy vì họ không phải là những kẻ ngu ngốc. Tuy nhiên, ví dụ này cho thấy rằng khung nhìn có thể là một phương pháp bảo mật hoàn hảo. Chúng tôi có thể hiển thị dữ liệu người dùng cần và không có gì khác. Đồng thời, chúng tôi có tất cả các công cụ để quản lý quyền trên dạng xem mà không ảnh hưởng đến quyền truy cập trên bảng.
Do đó, các chế độ xem khác nhau cho cùng một bảng có thể hiển thị dữ liệu khác nhau. Nếu bạn muốn hiển thị một cột bổ sung, hãy thêm các dạng xem vào truy vấn. Trong trường hợp này, không cần thay đổi quyền.
Chế độ xem hệ thống
Trong mỗi cơ sở dữ liệu, có thể có các dạng xem hệ thống do máy chủ tự động tạo. Tôi không khuyên bạn nên cấp quyền cho chúng vì chúng có thể hiển thị một số thông tin bổ sung, có thể giúp hacker thiết lập quyền hoặc đơn giản là phá hủy dữ liệu. Chế độ xem hệ thống bắt đầu bằng tiền tố sys và Hệ thống được chỉ định trong cột Loại của danh sách.
Thủ tục và chức năng
Các máy chủ cơ sở dữ liệu hiện đại hỗ trợ các thủ tục và chức năng được lưu trữ. Đây là mã PL / SQL hoặc Transact-SQL tùy thuộc vào cơ sở dữ liệu được thực thi trên máy chủ cơ sở dữ liệu. Sử dụng các thủ tục này, chúng tôi có thể thực hiện bất kỳ hoạt động nào trên máy chủ hoặc chỉ cần chọn dữ liệu, như trong dạng xem. Chúng tôi có thể đặt quyền cho từng quy trình.
Khi xem xét các vai trò, chúng tôi đã thấy các thủ tục trong danh sách các đối tượng mà bạn có thể đặt quyền trên đó và chỉ cột EXEC có sẵn trong các hàng này vì chỉ có thể thực hiện các thủ tục.
Các thủ tục và chức năng đã lưu trữ được lưu trữ trong một cơ sở dữ liệu cụ thể. Để xem các thủ tục của cơ sở dữ liệu Northwind, hãy chọn nhánh Databases / Northwind / Stored Procedure. Có nhiều thủ tục hệ thống, tên của chúng bắt đầu bằng tiền tố dt_ và Hệ thống được chỉ định trong cột Loại. Khuyến nghị không cấp quyền truy cập vào các thủ tục này, nếu có thể. Bạn có thể thấy các chức năng trong nhánh chức năng Cơ sở dữ liệu / Northwind / Người dùng xác định.
Để thay đổi quyền đối với các thủ tục và chức năng, hãy nhấp chuột phải vào tên của nó và chọn Tất cả nhiệm vụ / Quản lý quyền trong menu. Trong cửa sổ xuất hiện, bạn chỉ có thể thay đổi cột EXEC cho các thủ tục và các cột EXEC và DRI cho các hàm.
Chính sách quyền
Một số quản trị viên đặt quyền dựa trên vai trò hiện có, ví dụ:công khai. Điều này không đúng bởi vì, trong vai trò này, có thể có những quyền mà người dùng không cần. Do đó, hãy thử đặt một quyền hoàn toàn mới.
Đối với tôi, tôi luôn tạo một vai trò mới và cấp một bộ quyền tối thiểu. Nếu người dùng yêu cầu nhiều quyền hơn và chúng thực sự cần thiết, tôi sẽ thêm nhiều quyền hơn. Nếu bạn cho phép mọi thứ theo mặc định, không có gì đảm bảo rằng trong tương lai các quyền không cần thiết và nguy hiểm sẽ bị xóa.
Một vấn đề khác để đặt ít quyền hơn là thói quen. Người dùng có thể quen với thực tế là nhiều quyền được cấp cho họ và sau đó lệnh cấm sẽ gây ra một vụ bê bối nghiêm trọng. Không ai thích khi quyền của họ bị xâm phạm.
Bảng / Cơ sở dữ liệu
Cơ sở dữ liệu lưu trữ các cài đặt và thuộc tính ẩn của chúng trong các bảng và cơ sở dữ liệu hệ thống. Chúng không khác với các đối tượng cơ sở dữ liệu khác và các quyền có thể được đặt trên chúng. Trong mọi trường hợp, không cho phép người dùng truy cập các bảng này mà không có nhu cầu đặc biệt.
Trong SQL Server, dữ liệu hệ thống quan trọng được lưu trữ trong cơ sở dữ liệu chính và msdb. Do đó, các cơ sở dữ liệu này phải được bảo vệ. Trong Oracle, mỗi cơ sở dữ liệu tồn tại dưới dạng một đối tượng riêng biệt và các bảng hệ thống được lưu trữ cùng với các bảng của người dùng.
Hầu hết tất cả các máy chủ cơ sở dữ liệu đều cung cấp cài đặt cơ sở dữ liệu thử nghiệm có thể được sử dụng để học hoặc kiểm tra hệ thống. Nếu bạn có chúng, hãy xóa - vì quyền truy cập công khai được đặt cho các cơ sở dữ liệu này. Nếu một hacker biết tên hoặc thuộc tính của bất kỳ đối tượng hiện có nào trong hệ thống, nó sẽ đơn giản hóa rất nhiều nhiệm vụ của họ.
Khi kết nối với cơ sở dữ liệu thử nghiệm, bạn có thể thực thi một số lệnh trên máy chủ và làm hỏng hệ điều hành hoặc cơ sở dữ liệu đang hoạt động. Không có công cụ bổ sung nào nên có trong hệ thống. Hơn nữa, các bảng / cơ sở dữ liệu như vậy có quyền khá cao ngay cả đối với khách.
Tóm tắt
Mặc dù thực tế là chúng tôi đã sử dụng MS SQL Server làm ví dụ, các khái niệm về quyền, vai trò và xác thực vẫn tồn tại trong tất cả các cơ sở dữ liệu.
Biết tất cả các quy tắc mà chúng tôi đã xem xét, điều duy nhất bạn cần là khám phá tính đặc biệt của việc sử dụng chúng trong cơ sở dữ liệu của bạn.