User and Security Management
Trang 1Session 6 User and Security Management
Mục tiêu bài học:
Kết thúc chương này bạn có thể
Hiểu về bảo mật trong SQL Server security
Miêu tả các chế độ đăng nhập khác nhau của SQL Server
Sử dụng T-SQL để quản lý các đăng nhập
Giải thích về khái niệm của CSDL người dùng
Sử dụng store procedure hệ thống để quản lý CSDL người dùng
Giải thích khái niệm về các vai trò của CSDL và các vai trò của máy chủ
Mô tả các quyền hạn khác nhau gắn với từng vai trò
Danh sách các đối tượng CSDL và các quyền hạn gắn với chúng
Tìm hiểu cách làm thế nào để gán và thu hồi các quyền với các đối tượng CSDL
Giới thiệu
Trong phần trước chúng ta đã học về ngôn ngữ T-SQL Chúng ta cũng đã thảo luận về luồng các câu lệnh điều khiển logic khác nhau Chúng ta cũng đã học danh sách các biến và các hàm Một CSDL trong một tổ chức hoặc doanh nghiệp có thể chứa dữ liệu quan trọng và bí mật Trong ngữ cảnh này CSDL bảo mật đã trở thành một vấn đề quan trọng Nó cũng trở nên cần thiết và quan trọng để bảo trì nguyên tắc toàn vẹn dữ liệu và cách sử dụng các vai trò và quyền hạn trong các trạng thái phù hợp Một DBMS hoặc RDBMS phải hỗ trợ các kỹ thuật và là phương tiện để thực thi thước đo về độ bảo mật đó và nó sẽ giúp để bảo vệ dữ liệu
Trong chương này, chúng ta sẽ tập trung vào các chính sách bảo mật của SQL Server và thảo luận chi tiết thế nào là cơ chế bảo mật được thực thi trong SQL Server Chúng ta sẽ thảo luận về cách quản lý đăng nhập thông qua quyền đăng nhập Chúng ta cũng sẽ học về các vai trò và cách làm thế nào để chúng ta có thể thực thi bảo mật thông qua chúgn Cuối chương chúng ta sẽ tập trung vào các quyền của đối tượng
6.1 Giới thiệu về cơ chế bảo mật trong SQL Server
Bảo mật trong SQL Server có thể sử dụng mô hình 3 tầng như hình dưới đây:
Hình 6.1: Mô hình bảo mật của SQL Server
1 Sự thẩm định quyền
2 Khả năng để người sử dụng sử dụng một
hoặc nhiều CSDL
3 Các quyền cụ thể sử dụng
bảo vệ CSDL
Trang 2Lớp ngoài cùng là nhu cầu cho mức bảo mật chính của NT nó không có gì nhưng một tài khoản người dùng NT hoặc một nhóm bảo mật dành quyền truy cập tới SQL Server thông qua đăng nhập Lớp tiếp theo có thể sử dụng một hoặc nhiều CSDL Lớp trong cùng có các quyền cụ thể để thực thi các câu lệnh SQL dựa trên các đối tượng CSDL bảo vệ
The outer layer is the requirement for an NT security principal which is nothing but an NT user account or security group to gain access to SQL Server through a server login The next layer is the requirement to be able to use one or more databases The innermost layer is the requirement
to have specific permissions to execute SQL statements against protected database objects
Khả năng của tài khoản người dùng để dành được quyền truy cập thông qua 3 lớp được quyết định bởi hai yếu tố tối thiểu sau:
Các quyền truy cập được gán cho các nhóm bảo mật Windows để mỗi tài khoản trong nhóm
có các quyền tương ứng
Thay đổi quản trị CSDL phải có các quyền xây dựng tài khoản khách
Changes the database administrator has made to the rights of the built-in guest account
Lớp trong cùng của mô hình bảo mật SQL Server bao gồm các người dùng CSDL có khả năng truy cập đối tượng CSDL, bao gồm các bảng, các khung nhìn, và các thủ tục chứa
Để đơn giản hoá các quyền của người dùng, SQL Server 2000 cung cấp các vai trò, các vai trò này giống như các nhóm bảo mật của Windows Chúng ta có thể nhóm các người sử dụng riêng biệt liên quan đến nhau một cách logic vào một vai trò, và sau đó gán một tập hợp các quyền
thích hợp cho vai trò đó Có hai kiểu vai trò trong SQL Server Server và database Chúng ta sẽ
thảo luận chi tiết hơn trong phần sau
Bây giờ chúng ta sẽ tìm hiểu cách làm thế nào để quản lý bảo mật người dùng trong SQL Server thông qua trình quản lý đăng nhập
6.2 Trình quản lý đăng nhập
SQL Server kiểm tra người sử dụng ở hai cấp:
Quyền đăng nhập
Các quyền hiệu lực trên CSDL người dùng
SQL Server phải xác nhận người dùng trước khi người dùng có thể truy cập dữ liệu trong CSDL Trong SQL Server mỗi người sử dụng đưa ra một tài khoản riêng biệt là tài khoản đăng nhập Mỗi người sử dụng tương tác với SQL Server bằng cách sử dụng tài khoản này Người sử dụng
sử dụng tài khoản đăng nhập được xác định và gán các quyền tương ứng để kết nối tới SQL Server Nếu sự xác nhận này không thành công, người sử dụng không thể kết nối tới SQL Server
6.2.1 Xác nhận thông tin đăng nhập
Một người sử dụng phải có một tài khoản để kết nối tới SQL Server SQL Server có bao cơ chế xác nhận thông tin đăng nhập – SQL Server authentication, Windows NT authentication
và chế độ xác nhận hỗn hợp Mỗi cơ chế xác nhận thông tin đăng nhập này đều có kiểu tài khoản đăng nhập khác nhau
Trang 3 Kiểm soát quyền hạn của SQL Server
Khi sử dụng cơ chế kiểm soát quyền hạn của SQL Server, quản trị hệ thống SQL Server xác nhận một tài khoản đăng nhập SQL Server và mật khẩu Người sử dụng phải cung cấp cả tên đăng nhập và mật khẩu để kết nối đến SQL Server
Kiểm soát quyền hạn của Windows NT
Khi một người sử dụng kết nối tới SQL Server bằng cơ chế kiểm soát quyền hạn của Windows NT, SQL Server kiểm tra cùng với Windows NT để xác nhận tài khoản đăng nhập
và mật khẩu là hợp lệ Nếu tên tài khoản và mật khẩu nhập vào hợp lệ thì người sử dụng có thể truy cập vào SQL Server và kết nối tới máy chủ
Kiểm soát quyền hạn của chế độ hỗn hợp
Trong chế độ hỗn hợp, một người sử dụng kết nối tới SQL Server sử dụng cả hai cơ chế kiểm soát quyền hạn của Windows hoặc cơ chế kiểm soát quyền hạn của SQL Server Những người sử dụng kết nối thông qua tài khoản người dùng Windows có thể tạo các kết nối tin cậy trong cả chế độ hỗn hợp hay chế độ kiểm soát quyền hạn của Windows
Người dùng phải được sự chấp nhận của quản trị hệ thống để truy cập CSDL trên máy chủ Điều này được thực hiện bằng cách gán các quyền hạn cho tài khoản người dùng và các vai trò Các quyền hạn này kiểm soát các hoạt động mà người dùng có thể thực hiện trong CSDL SQL Server
6.2.2 Kiểm soát hiệu lực của quyền hạn
Với mỗi CSDL, các quyền hạn được gán cho các tài khoản người dùng và các vai trò được tạo lập
để thực hiện (hoặc hạn chế) các hành động tác động lên CSDL SQL server chấp nhận các lệnh sau khi người dùng dành được quyền truy cập CSDL thành công
SQL Server thực hiện các bước sau đây trong khi thực hiện kiểm tra hiệu lực của các quyền hạn:
1 Khi người sử dụng thực hiện một hành động, ví dụ thực hiện một câu lệnh T-SQL hoặc chọn một tuỳ chọn trong thực đơn của Enterprise Manager, các lệnh T-SQL được gửi tới SQL Server
2 Khi SQL Server nhận được câu lệnh T-SQL, nó tiến hành kiểm tra các quyền hạn của người dùng để thực hiện câu lệnh đó
3 SQL Server thực hiện một trong hai hành động sau:
Nếu người dùng không có quyền thích hợp, SQL Server trả về lỗi
Nếu người dùng có các quyền thích hợp, SQL Server sẽ thực hiện câu lệnh T-SQL đó
Sử dụng Enterprise Manager và tuỳ chọn Properties của máy chủ, chúng ta có thể thiết lập các
chế độ kiểm soát quyền hạn giống như chế độ kiểm soát quyền hạn của Windows và chế độ kiểm soát quyền hạn hỗn hợp
6.2.3 Tạo lập đăng nhập
Sử dụng Enterprise Manager chúng ta có thể quản lý các đăng nhập bằng cách sử dụng chức năng Create Login Wizard của SQL Server Enterprise Manager Chức năng wizard này đưa ra
Trang 4các bước đầy đủ hướng dẫn để tạo lập các đăng nhập theo một phương thức cách dễ dàng và hiệu quả
Hình 6.2: Create Login Wizard
Chúng ta có thể sử dụng stored procedures để tạo lập và gỡ bỏ các đăng nhập
Để tạo lập một đăng nhập, chúng ta có thể sử dụng các lệnh sau đây
EXEC sp_addlogin 'Arwen', 'princess'
Ở đây tên đăng nhập là “Arwen” và mật khẩu là “princess”
Để gỡ bỏ một đăng nhập khi nó không cần thiết nữa, chúng ta có thể sử dụng câu lệnh sau:
EXEC sp_droplogin 'Arwen'
6.3 Trình quản lý người dùng
SQL Server cho phép hai kiểu tài khoản người dùng:
Người dùng hệ thống
Nguời dùng CSDL
6.3.1 SQL Server users
Một định danh người dùng (ID) có thể sử dụng để nhận dạng một người sử dụng trong một CSDL Tất cả quyền hạn và quyền sở hữu của các đối tượng trong CSDL được kiểm soát bởi tài khoản người dùng này Các tài khoản người dùng CSDL được xác định bởi CSDL đó; tài khoản
Trang 5người dùng abc trong CSDL books khác với tài khoản người dùng abc trong CSDL inventory, thậm trí trong cả trường hợp tài khoản người dùng có cùng ID Các ID của người
dùng được xác định bởi các thành viên của db_owner có các vai trò CSDL nhất định
6.3.2 Quan hệ giữa CSDL người dùng và tên đăng nhập
Một người sử dụng trong CSDL được xác định bởi ID của họ, không phải ID đăng nhập của họ
Ví dụ, sa là tài khoản đăng nhập được ánh xạ tới tài khoản dành riêng dbo (database owner) trong
mọi CSDL Tất cả các câu lệnh T-SQL bảo mật-liên quan sử dụng ID người dùng như là tham số bảo mật
Một ID đăng nhập bản thân nó không đưa ra được các quyền của người dùng để truy cập các đối tượng trong bất kỳ CSDL nào Một ID đăng nhập phải được kết hợp với một ID người dùng trong mỗi CSDL truớc khi có bất kỳ ai đó kết nối bằng ID đăng nhập này để có thể truy cập được các đối tượng trong CSDL Nếu một ID đăng nhập không được gắn kết với bất kỳ một ID người dùng nào trong CSDL, nó sẽ được kết hợp với ID người dùng khách (guest) Nếu một CSDL không có tài khoản người dùng guest, một đăng nhập không thể truy cập CSDL trừ khi nó được kết hợp với một tài khoản người dùng hợp lệ
Tài khoản khách (guest) là một tài khoản người dùng đặc biệt trong CSDL SQL Nếu một người dùng gõ vào câu lệnh USE database để truy cập CSDL trong trường hợp chúng không được kết hợp với một tài khoản người dùng, thay vào đó chúng được kết hợp với tài khoản khách
6.3.3 Quản lý tên người dùng và tên đăng nhập
Ví dụ dưới đây mô tả quá trình của một tài khoản Windows 2000 để truy cập CSDL và kết hợp đăng nhập với một người dùng trong CSDL:
Ví dụ 1:
1 USE master
2 GO
3 sp_grantlogin 'OnlineDOMAIN\Arwen'
4 GO
5 sp_defaultdb @loginame = 'OnlineDOMAIN\Arwen', defdb = 'books'
6 GO
7 USE books
8 GO
9 sp_grantdbaccess 'OnlineDOMAIN\Arwen', 'Arwen'
10 GO
11 sp_grantdbaccess 'OnlineDOMAIN\Arwen', 'Arwen'
12 GO
D Danh sách các stored procedures phổ biến trong ngữ cảnh này được tóm tắt dưới đây:
1 Thủ tục sp_grantlogin cho phép tài khoản người dùng hoặc tài khoản nhóm người dùng
Windows NT/2000 kết nối tới SQL Server sử dụng cơ chế kiểm soát quyền hạn trong Windows
2 Thủ tục sp_defaultdb thay đổi CSDL mặc định để đăng nhập.
Trang 63 Thủ tục sp_grantdbaccess được sử dụng để thêm một tài khoản bảo mật CSDL và gán quyền
truy cập cho tài khoản này
4 Thủ tục sp_revokedbaccess được sử dụng để xoá một tài khonả bảo mật từ CSDL.
Trang 76.4 Vai trò quản lý Role Management
Các vai trò rất quan trọng bởi vì chúng là cách chính để phân chia các đặc quyền hệ thống tới người dùng Các đặc quyền có thể phân chia tới người dùng thông qua một vai trò hoặc trực tiếp, nhưng sự phân chia trực tiếp này có thể tốn khá nhiều thời gian và dài dòng đối với DBA Bằng cách tạo lập một vai trò cho một vài kiểu người dùng và phân chia hệ thống cho vai trò đó, chúng
ta có thể cắt bớt được số lượng công việc phải làm và dễ dàng theo dõi các quyền hạn Một vai trò giống như khái niệm một nhóm trong NT Chúng ta có thể gán các quyền hạn tới cả vai trò hay từng người dùng riêng biệt Nếu chúng ta gán các quyền hạn tới vai trò, sau đó mọi người dùng được chúng ta thêm vai trò này sẽ kế thừa các quyền hạn của vai trò đó Do vậy các vai trò là công cụ mạnh mẽ cho pép chúng ta nhóm các người dùng vào thành từng nhóm riêng và có thể thiết lập các quyền hạn trên các nhóm đó
Đó là cách dễ dàng để quản lý các quyền hạn trong CSDL nếu chúng ta định nghĩa một tập hợp các vai trò dựa trên các chức năng công việc và gán cho mỗi vai trò các quyền hạn cụ thể dựa trên các công việc đó Chúng ta có thể dịch chuyển các người dùng giữa các vai trò dễ dàng hơn việc quản lý các quyền hạn cho mỗi người dùng riêng biệt Nếu chức năng của công việc thay đổi, thì cũng dễ dàng thay đổi các quyền hạn đối với vai trò đó và sự thay đổi này tự động áp dụng cho tất cả các thành viên của vai trò đó
SQL Server có các vai trò CSDL (database roles) và các vai trò máy chủ (server roles) Database roles được dùng trong việc cung cấp các cấp độ truy cập khác nhau tới CSDL Server roles được
dùng để hạn chế hoặc cho phép người dùng thực hiệnh các thao tác khác nhau
6.4.1 Các vai trò CSDL
Có một vai trò CSDL rất đặc biệt: vai trò Public Mọi người dùng được định nghĩa trong CSDL đều thuộc vai trò Public Nếu chúng ta muốn mọi người trong CSDL có quyền hạn cụ thể nào đó,
chúng ta phải gán quyền hạn đó cho vai trò public Nếu một người dùng không được gán các
quyền cụ thể trên một đối tượng, họ sử dụgn các quyền đã gán cho public Vai trò Public này
hầu như không có quyền hạn ngoại trừ vài quyền rất cơ bản cho phép người dùng tạo kết nối tới CSDL Vai trò này có một số quy tắc cơ bản kèm theo nó
Nó có trong mọi CSDL
Nó không thể bị xoá
Mọi người dùng đều thuộc vai trò Public, bao gồm cả tài khoản sa.
Bởi vì mặc định mọi người dùng đều thuộc vai trò này, chúng ta không thể thêm hoặc gỡ bỏ các người dùng ra khỏi vai trò này
Chúng ta hãy xem các vai trò khác nhau và các quyền hạn đi kèm với chúng
db_owner: Đây là vai trò cấp cao nhất mà người dùng có thể có Vai trò này cho phép người dùng có toàn quyền kiểm soát trên CSDL Người dùng sa là thành viên của vai trò db_owner db_securityadmin: Vai trò này cho phép một người dùng quản lý được tất cả các vai trò và các
thành viên của chúng Vai trò này cũng cho phép gán các quyền hạn cho các vai trò Nếu chúng ta
Trang 8có một người dùng mà chúng ta có thể tin cậy để quản lý bảo mật cho CSDL của chúng ta nhưng không cần thiết phải có đầy đủ quyền kiểm soát trên CSDL, chúng ta có thể gán vai trò này cho người dùng đó
db_accessadmin: Vai trò này dùng cung cấp các quyền người dùng để thêm hoặc gỡ bỏ các
người dùng trong CSDL
db_ddladmin: Vai trò này cho phép một người dùng thao tác với tất cả các đối tượng trong
CSDL Ví dụ, một người dùng có thể tạo lập, sửa chữa, hoặc xoá các đối tượng CSDL Vai trò này có quyền để chạy tất cả các SQL Server 2000 DDLs
db_backupoperator: Vai trò này cho phép người dùng thực hiện thao tác sao chép dự phòng
CSDL
db_datawriter: Vai trò này cho phép người dùng sửa chữa dữ liệu trong tất cả các bảng người
dùng định nghĩa trong CSDL
db_datareader: Vai trò này cho phép một người dùng hiển thị dữ liệu từ các bảng người dùng
định nghĩa trong CSDL
db_denydatawriter: Vai trò này ngăn chặn người dùng sửa chữa dữ liệu trong bảng người dùng
định nghĩa trogn CSDL
db_denydatareader: Vai trò này ngăn chặn người dùng hiển thị dữ liệu trong bảng người dùng
định nghĩa trong CSDL
Chú ý: Một người dùng có thể không có, có một hoặc nhiều các vai trò Nếu một người dùng
thuộc nhiều hơn một vai trò, người dùng sẽ có tập hợp tất cả các quyền của các vai trò đó theo thứ tự
Chúng ta có thể tạo lập một vai trò CSDL bằng cách sử dụng Enterprise Manager hoặc sử dụng các thủ tục hệ thống
Trang 9Hình 6.3: Creating New Roles
Giống như hầu hết tất cả các đối tượng CSDL, chúng ta cần đưa ra tên của vai trò mà SQL Server 2000 có thể sử dụng để nhận dạng chúng
SQL Server đưa ra 2 kiểu vai trò:
Vai trò chuẩn: Kiểu vai trò này giống như các nhóm trong Windows NT Vai trò này có thể
chứa các người dùng và quyền hạn có thể áp dụng Khi một người dùng kết nối với tư cách là thành viên của vai trò, chúng kế thừa các quyền hạn của vai trò đó
Vai trò ứng dụng: Đây là các vai trò đặc biệt trong SQL Server 2000 bởi vì chúng không
chứa bất kỳ thành viên (hoặc người sử dụng) nào Trong vài trường hợp chúng ta có thể nghĩ các vai trò đặc biệt này giống như các tài khoản người dùng Các vai trò ứng dụng giống như người dùng bởi vì chúng yêu cầu phải có mật khẩu
6.4.2 Vai trò máy phục vụ
Chúng ta không chỉ gán các vai trò cho người dùng trong CSDL mà chúng ta còn có thể gán các vai trò người dùng trong SQL Server 2000 Điều này có nghĩa là chúng ta có thể hạn chế hoặc
cho phép người dùng thực hiện các thao tác khác nhau Các vai trò này gọi là các vai trò máy phục vụ.
Trang 10Dưới đây là các vai trò máy phục vụ sẵn có trong SQL Server 2000:
sysadmin: Đối với trường hợp của SQL Server 2000 vai trò này có đầy đủ các quyền kiểm soát trên toàn bộ ứng dụng Tài khoản sa thuộc vai trò này.
securityadmin: Vai trò này có thể tạo lập và quản lý các đăng nhập cho máy chủ.
serveradmin: Đối với trường hợp của SQL Server 2000, vai trò này có thể thiết lập các tuỳ chọn
cấu hình Vai trò này cũng có khả năng tắt máy chủ
setupadmin: Vai trò này có khả năng khởi động các thủ tục và các liên kết máy chủ
processadmin: Vai trò này có khả năng quản lý quá trình mà SQL Server 2000 đang thực hiện.
Điều này có nghĩa là vai trò này có thể huỷ bỏ lệnh, kết thúc phiên làm việc của người dùng Nếu người dùng có bất kỳ các giao tác nào đang mở, các giao tác này được phục hồi lại trước khi phiên làm việc kết thúc
diskadmin: Vai trò này có thể quản lý các tệp tin trên đĩa, ví dụ các nhóm tệp tin.
dbcreator: Vai trò này có thể tạo lập, thay đổi, và huỷ bỏ CSDL.
6.4.3 Thêm một thành viên tới một vai trò
Các vai trò có thể thêm bằng cách sử dụng Enterprise Manager hoặc thủ tục chứa hệ thống
sp_addrole Chúng ta có thể thêm các thành viên vào vai trò bằng cách sử dụng thủ tục sp_addrolemember Ví dụ dưới đây hiển thị cách làm thế nào để tạo lập các vai trò và thêm các
thành viên vào các vai trò này bằng cách sử dụng thủ tục
Ví dụ 2:
1 sp_addrole 'Teacher'
3 sp_addrole 'Student'
5 sp_addrole 'StudentTeacher'
7 sp_addrolemember 'Teacher', 'NETDOMAIN\Peter'
9 sp_addrolemember 'Teacher', 'NETDOMAIN\Cathy'
11 sp_addrolemember 'StudentTeacher', 'NETDOMAIN\Diane'
13 sp_addrolemember 'Student', 'NETDOMAIN\Mel'
15 sp_addrolemember 'Student', 'NETDOMAIN\Jim'
17 sp_addrolemember 'Student', 'NETDOMAIN\Lara'
19 GRANT SELECT ON StudentGradeView TO Student
21 GRANT SELECT, UPDATE ON TeacherGradeView TO Teacher