Tìm hiểu về khái niệm role trong SQL Server
Trong bất kỳ hệ thống cơ sở quản trị dữ liệu nào, thì vấn đề an ninh, bảo mật luôn được
đặt lên hàng đầu. Và với SQL Server, nếu chúng ta tận dụng được nhiều ưu điểm của ứng
dụng này, những người làm công việc quản trị hệ thống sẽ giảm bớt được rất nhiều gánh
nặng cũng như áp lực trong công việc. Với bài viết hướng dẫn dưới đây, chúng tôi sẽ giới thiệu
với các bạn một số thông tin cơ bản cũng như cách sử dụng, quản lý role của SQL Server.
Bước đầu tiên cần thực hiện trong toàn bộ quá trình bảo mật dữ liệu cho người dùng là xác định
rõ ràng những tài khoản nào sẽ được quyền truy cập, xem hoặc chỉnh sửa dữ liệu. Ví dụ, các
trưởng bộ phận có thể xem được tài khoản lương của nhân viên, trong khi các bậc quản lý ở cấp
cao hơn sẽ có quyền xem và chỉnh sửa, trong khi nhân viên chỉ có thể xem được tài khoản của
chính họ.
Tiếp theo, cần phải xác định rõ tài khoản nào sẽ được cấp quyền điều chỉnh, thay đổi cơ sở dữ
liệu. Do vậy, tùy từng mô hình hệ thống, quy mô của công ty, tổ chức mà khối lượng công việc
của người quản trị cũng sẽ tăng lên, bên cạnh đó, kiến thức và kinh nghiệm sử dụng của mỗi
người lại khác nhau, do vậy việc làm sao đảm bảo được mức an toàn tối thiểu cho toàn bộ nhân
viên cũng trở nên vất vả hơn rất nhiều. Cụ thể, trong phần tiếp theo của bài viết, chúng tôi sẽ đề
cập đến khái niệm role và mối quan hệ với Windows Group, làm thế nào để gán thêm hoặc từ
chối quyền truy cập của 1 hoặc nhiều tài khoản người dùng trong thời gian hoạt động.
Về mặt bản chất, role là 1 phần của tiered security model:
- Login security: thực hiện quá trình kết nối tới server
- Database security: nhận quyền truy cập tới cơ sở dữ liệu
- Database object: nhận quyền truy cập tới từng đối tượng và dữ liệu riêng biệt trong toàn hệ
thống
Trước tiên, người dùng phải tiến hành đăng nhập vào server bằng cách nhập mật khẩu, sau khi
quá trình kết nối này hoàn tất, việc truy cập tới các cơ sở dữ liệu đã lưu trữ sẽ được thực hiện qua
việc chỉ định tài khoản. Và khi người quản trị đã hoàn tất việc gán quyền cho những tài khoản
này, họ sẽ không thể truy cập đến những vùng dữ liệu không được phép khác.
Tuy nhiên, ưu điểm lớn nhất của việc sử dụng role chính là hiệu quả trong quá trình quản lý. Các
bạn hãy thử tưởng tượng rằng, nếu 1000 nhân viên cần xem hoặc chỉnh sửa dữ liệu cá nhân của
họ sớm nhất có thể, thì bộ phận quản trị hệ thống chỉ việc lựa chọn trong Windows Group có
sẵn, và sau đó là gán toàn bộ vào SQL Server role tương ứng – thay vì việc phải chỉnh sửa 1000
tài khoản lần lượt theo cách thủ công. Hiểu rõ hơn về trường hợp này, Windows Group có chứa
toàn bộ tài khoản người dùng với quyền truy cập tương ứng tới hệ thống mạng trên Windows, và
các role của SQL Server sẽ phụ thuộc toàn bộ vào những thành phần có liên quan. Do vậy,
chúng ta chỉ cần gán quyền theo nhu cầu với cơ sở dữ liệu của SQL Server và tài khoản tương
ứng trên Windows.
Các role của server thường được giám sát và quản lý bởi Database Administrator – DBA và áp
đụng được với toàn bộ server, chứ không riêng gì đối với từng thành phần riêng rẽ. Ở chế độ mặc
định, các role này được thiết lập public đối với tất cả các tài khoản, và toàn bộ những tài khoản
sau khi thêm vào SQL Server cũng sẽ tự động được gán role public.
Việc tạo cơ sở dữ liệu là của riêng người quản trị, nhưng các bạn cần lưu ý một số điểm sau về
quy chuẩn chung khi tạo bảng:
- db_owner: toàn bộ người dùng có quyền full – access
- db_accessadmin: người dùng có quyền quản lý các Windows Group và tài khoản SQL Server
đăng nhập
- db_datareader: người dùng có thể đọc được toàn bộ dữ liệu
- db_datawriter: người dùng có quyền thêm, xóa hoặc chỉnh sửa dữ liệu trong bảng
- db_ddladmin: người dùng có thể sử dụng các file dynamic – link library (DLL)
- db_securityadmin: người dùng có thể chỉnh sửa vai trò role và quản lý các bậc quản lý, phân
quyền khác
- db_bckupoperator: người dùng có thể sao lưu cơ sở dữ liệu
- db_denydatareader: người dùng không thể xem dữ liệu trong bảng
- db_denydatawriter: người dùng không thể xem, thay đổi hoặc xóa dữ liệu trong bảng
Với các role cố định thì chúng được áp dụng trên toàn bộ mô hình của hệ thống, với 1 số điểm
lưu ý chung như sau:
- SysAdmin: toàn bộ người dùng đều có thể thực hiện các thao tác trên server
- ServerAdmin: toàn bộ người dùng đều có thể thiết lập, tùy chỉnh các phương án lựa chọn trên
server
- SetupAdmin: toàn bộ người dùng đều có thể quản lý các server đã kết nối, những tùy chọn và
tác vụ hoạt động của SQL Server
- Security Admin: toàn bộ người dùng đều có thể quản lý các thành phần có liên quan đến an
ninh, bảo mật
- ProcessAdmin: toàn bộ người dùng đều có thể tắt hoặc tạm dừng bất kỳ tiến trình nào hoạt
động trên SQL Server
- DbCreator: toàn bộ người dùng đều có thể tạo, thay đổi, xóa hoặc khôi phục cơ sở dữ liệu
- DiskAdmin: toàn bộ người dùng có thể quản lý các file của SQL Server
- BulkAdmin: toàn bộ người dùng có thể thực hiện nhiều lệnh insert khác nhau
Tiếp theo, chúng ta sẽ sử dụng SQL Server Enterprise Manager để gán Windows group và cơ
sở dữ liệu Pubs (database mẫu đi kèm với SQL Server 2000). Bước đầu tiên là tạo tài khoản đăng
nhập của Group Guest, qua đó người sử dụng có thể truy cập được vào SQL Server:
- Khởi động Enterprise Manager, mở thư mục security
- Nhấn chuột phải vào mục Logins, chọn New Login từ menu hiển thị, cửa sổ New Login sẽ
hiển thị như hình dưới. Lưu ý rằng trong trường hợp này, Windows Authentication đã được lựa
chọn sẵn, và chúng ta sẽ sử dụng Windows Authentication Mode, trái ngược với SQL Server
Mixed Mode (Mixed Mode bao gồm Windows Security và mô hình bảo mật sẵn có của SQL
Server, và Windows Authentication luôn khuyến cáo được sử dụng cùng với SQL Server):
- Nhấn nút bên cạnh ô Name để hiển thị SQL Server Login Properties – New Login, chọn tiếp
Windows group tương ứng (ở đây là Guests), nhấn tiếp nút Add sau đó nhấn OK để đóng cửa sổ
SQL Server Login Properties—New Login:
- Tại thẻ General, chọn cơ sở dữ liệu Pubs từ danh sách Database, lựa chọn mặc định là
Master nhưng các bạn đừng nên gán quyền truy cập cho database này, bởi vì nó sẽ can thiệp trực
tiếp tới quá trình cài đặt của SQL Server.
- Chọn tiếp thẻ Database Access để xem thông tin về cơ sở dữ liệu có sẵn trên hệ thống
Để tiếp tục, chúng ta phải chọn database mặc định trước khi SQL Server kích hoạt role database.
Chọn tiếp Pubs (như hình dưới), phần Public role sẽ tự động được gán. Tại thời điểm này,
chúng ta có thể chọn và gán bất kỳ role nào, bên cạnh đó, group Guest đã được liệt kê sẵn trong
cột Column:
- Nhấn tiếp OK để hoàn tất quá trình này, Enterprise Manager sẽ hiển thị phần đăng nhập mới
tại cửa sổ bên phải, và cho đến lúc này thì tất cả các thành viên của group Windows Guests đã
có thể đăng nhập vào SQL Server:
- Một cách khác để gán role tương tự như trên, trong Enterprise Manager các bạn chọn Pubs,
nhấn đúp vào Roles > db_accessadmin để hiển thị cửa sổ Role Properties:
- Nhấn nút Add để hiển thị danh sách user và group, chọn tiếp Guest như hình dưới:
- Cửa sổ Database Role Properties sẽ hiển thị sau khi gán thêm phần login của Guest vào role
db_accessadmin:
- Nhấn tiếp OK để hoàn tất quá trình này.
Tại thời điểm này, chúng ta đã hoàn tất quá trình gán thêm group Windows Guest vào SQL
Server và group Guest vào cơ sở dữ liệu Pubs và role db_accessadmin. Các thành viên của
group Guest đã được kế thừa toàn bộ phân quyền trong role db_accessadmin (đã được liệt kê ở
trên) bên trong cơ sở dữ liệu Pubs.
Tiếp theo, chúng ta sẽ tạo mới database role. Cụ thể, các role đã được xác định sẵn, ví dụ như
db_accessadmin lại không được đầy đủ, nhưng chúng ta vẫn có thể tạo được role mới. Ví dụ tại
đây, chúng ta sẽ tạo role mới có tên là Purchasing:
- Quay trở lại bảng điều khiển Enterprise Manager, nhấn chuột phải vào bất kỳ vị trí nào tại
cửa sổ bên phải, chọn New Database Role từ menu hiển thị. Điền tên Purchasing trong phần
Name, sau đó nhấn nút Add. Các bạn lưu ý là tại thời điểm này nút chức năng Permissions vẫn
đang trong tình trạng disable.
- Nhấn tiếp nút Add để gán tiếp tài khoản user hoặc group tới phần role. Trong trường hợp này
là group Guest (hình trên).
Chúng ta vừa tạo 1 role mới có tên là Purchasing trong cơ sở dữ liệu Pubs
- Nhấn OK để đóng cửa sổ này lại.
Sau khi tạo role mới - Purchasing dành cho database Pubs, chúng ta phải khởi tạo tài khoản
user nào sẽ được gán vào role của Purchasing (qua group Guest). Và cũng tại đây, các bạn hãy
thiết lập 1 vài mức phân quyền đơn giản cho role Purchasing này:
- Mở lại phần role Purchasing vừa tạo ở bước trên trong cửa sổ Enterprise Manager, và lần
này nút chức năng Permissions sẽ hoạt động được
- Nhấn nút Permissions để mở bảng điều khiển thuộc tính Database Role Properties. Tại đây,
các bạn có thể thiết lập mức phân quyền tương ứng cho từng đối tượng tại đây.
- Ví dụ, nếu đánh dấu vào cột Delete như hình trên tại dòng authors thì toàn bộ thành viên của
role này đều có thể xóa các bản ghi dữ liệu trong bảng Authors
- Nếu để ý kỹ, các bạn có thể thấy rằng việc lựa chọn bảng Authors đồng thời cũng đã kích hoạt
nút chức năng Columns. Nhấn vào nút Columns này để hiển thị bảng Column Permissions.
Trong bảng này, chúng ta có thể giới hạn số lượng truy cập trong từng cột nhất định.
Các server role server từ trước đến nay, như 1 quy luật chung chung, phần lớn những người quản
trị sẽ không tiến hành gán bất kỳ tài khoản người dùng nào tới server role cố định, vì chúng chỉ
được dùng cho việc quản trị cơ sở dữ liệu và tài khoản Administrator. Nhưng bên cạnh đó, chúng
ta vẫn có thể thực hiện được việc gán tài khoản người dùng tới server role bằng 2 cách: dùng
Enterprise Manager hoặc Query Analyzer. Ví dụ, để gán thêm tài khoản Guest tới server role
Database Creators qua Enterprise Manager thì cần làm như sau:
- Mở rộng phần Security Folder
- Nhấn đúp vào mục Server Roles > Database Creators
- Nếu muốn chọn và gán group Windows tới phần role, các bạn nhấn nút Add để mở cửa sổ
Add Members
- Chọn tiếp group Windows Guest sau đó nhấn OK để đóng cửa sổ này, gán tiếp group Guest
vào bảng Server Role Properties:
Lưu ý rằng tại thời điểm này thì cả 2 tab của bảng này đã có thể xem được, mở tab General để
gán tiếp phần login tới role, hoặc sử dụng tab Permissions để chọn câu lệnh SQL tương ứng mà
server role này có thể thực thi. Sau đó, nhấn OK để hoàn tất quá trình này.
Còn nếu muốn sử dụng Query Analyzer, các bạn hãy gõ cấu trúc lệnh dưới đây, với thông số
name tượng trưng cho user và role chính là 1 trong những thành phần đã được liệt kê ở bên trên:
Exec sp_addserverrolemember name, role
Ví dụ, câu lệnh như dưới đây sẽ cho phép chúng ta gán bản ghi Martin Reid vào role SysAdmin:
Exec sp_addserverrolemember “Martin Reid”,
“SysAdmin”
Một trong những thành phần quan trọng nhất của SQL Server là system stored procedure – có
khả năng hỗ trợ người sử dụng trong việc quản lý nhiều khía cạnh khác nhau trên server. Danh
sách đầy đủ của system stored procedure các bạn có thể tham khảo thêm tại đây. Chúc các bạn
thành công!