Cơ bản về bảo mật CSDL với SQL Server
Một số khái niệm cơ bản
Login và User:
Login: Dùng để truy cập vào hệ thống SQL Server, các Login chỉ mới có quyền truy cập vào Server chứ chưa hẳn có quyền truy cập vào các Database trên Server, các quyền truy cập vào Database được gắn liền với các người dùng CSDL (Users). Để xem tất cả các login của Server, dùng lệnh exec sp_helplogins hoặc trong SSMS (Server/Security/Logins)
User: Mỗi Database có một danh sách các người dùng được phép truy cập CSDL của mình, mỗi user luôn được gắn (mapped) với một login ở mức Server. Khi bạn đăng nhập vào SQL Server thông qua login này, bạn sẽ có quyền truy cập vào database theo quyền hạn mà user tương ứng với nó được cấp. Mỗi login có thể gắn với một hoặc nhiều user với quyền hạn khác nhau trên các Database.
Để xem tất cả các users của một database, có thể dùng lệnh exec sp_helpuser hoặc trong SSMS (Database/Security/Users)
Server role (vai trò phía Server)
Role là tập hợp một số các quyền được nhóm lại và có một tên đại diện để thuận tiện cho việc quản lý. Server role là nhóm các quyền ở mức server mà login khi được cấp sẽ có thể thực hiện một số thao tác xác định ở mức server. Các Server Roles trong SQL Server như sau:
- sysadmin
- bulkadmin
- dbcreator
- diskadmin
- processadmin
- securityadmin
- serveradmin
- setupadmin
Trong đó sysadmin có quyền cao nhất (toàn quyền) hoạt động trong server, dbcreator có quyền tạo database…
Database role (vai trò phía Database)
Database role tập hợp các quyền truy xuất database thành từng nhóm và được đại diện bởi một tên dùng để cấp phát quyền truy cập CSDL cho các users.
Sau đây là các Database role trong SQL Server
- db_owner
- db_securityadmin
- db_accessadmin
- db_backupoperator
- db_ddladmin
- db_datawriter
- db_datareader
- db_denydatawriter
- db_denydatareader
Tên gọi của các Database Roles đã cho biết phần nào quyền truy cập Database. Chẳng hạn, db_datareader có quyền đọc dữ liệu từ tất cả các bảng, role db_datawriter có quyền ghi vào tất cả các bảng, role db_owner có quyền cao nhất (toàn quyền) trong database.
Authentication (xác thực)
SQL Server cho phép xác thực đăng nhập vào hệ thống bằng hai cơ chế là windows authentication và SQL Server authentication. SQL Server sẽ yêu cầu bạn chọn cơ chế xác thực windows hay SQL Server khi bạn tạo một login mới. Nếu chọn xác thực bằng windows authentication, bạn phải cung cấp một windows account và SQL Server sẽ chỉ lưu tên của account đó trong danh sách login. Nếu chọn SQL Server authentication, bạn cần cung cấp login name và password và cả hai được lưu trong SQL Server.
Cấp phát và thu hồi quyền trong SQL
Cấp phát quyền truy cập (GRANT)
GRANT PRIVILEGES|ALL
ON DatabaseObjects
TO USERS
[WITH GRANT OPTION ]
Trong đó:
PRIVILEGES : Các quyền truy cập Database (Select, Insert, Update, Excute…)
DatabaseObjects: Các đối tượng cơ sở dữ liệu (Table, View, Stored Procedure, Functions…)
USERS: Người dùng| nhóm người dùng
WITH GRANT OPTION: Cho phép người dùng chuyển tiếp quyền cho người dùng khác
Ví dụ: Cấp phát quyền SELECT, UPDATE trên bảng ACCOUNTS cho người dùng ‘khoa’ và cho phép người dùng này có thể cấp phát các quyền này cho người dùng khác
GRANT SELECT, UPDATE
ON ACCOUNTS
TO khoa
WITH GRANT OPTION
Thu hồi quyền truy cập cơ sở dữ liệu
REVOKE PRIVILEGES|ALL
ON DatabaseObjects
FROM USERS
[CASCADE]
Nếu ta đã cấp phát quyền cho người dùng nào đó bằng câu lệnh GRANT với tuỳ chọn WITH GRANT OPTION thì khi thu hồi quyền bằng câu lệnh REVOKE phải chỉ định tuỳ chọn CASCADE. Trong trường hợp này, các quyền được chuyển tiếp cho những người dùng khác cũng đồng thời được thu hồi.
Ví dụ: Thu hồi quyền Update trên bảng ACCOUNTS từ người dùng khoa và thu hồi quyền này từ những người dùng khác mà User khoa đã cấp phát cho họ
REVOKE UPDATE
ON ACCOUNTS
FROM khoa
CASCADE
Cách tạo và quản lý người dùng trong SQL Server Management Studio
Bước1: Login vào SQL Server với người dùng có đủ quyền
Bước 2: Tạo mới login
Chọn Login name, Mode authentication, Server Role, Users Mapping… cho login
Tạo User truy xuất CSDL (ATM)
Tạo User name (tự đặt) và chọn login name cho username (ở đây chọn login là dba đã tạo ở bước trước)
Đăng nhập vào hệ thống với User dba vừa tạo
Để User ‘bda’ có quyền truy cập database, bạn phải đăng nhập vào hệ thống với vai trò của người quản trị và phân quyền truy xuất CSDL hợp lý cho ‘bda’.