Course ILT
Chương 14
SECURITY
Bảo mật trong cơ sở dữ liệu
Mục tiêu
Course ILT
Trong phần này, chúng ta sẽ học về:
– Các tính chất bảo mật của SQL Server
– Tạo tài khoản đăng nhập (user login)
– Phân biệt tài khoản đăng nhập (user login) và
tài khoản người dùng (user ID)
– Các loại User Roles:
Fixed Server Roles
Database Roles
– Các loại quyền bảo mật( Security Permissions)
– Nhóm lệnh DCL : GRANT, DENY, REVOKE
– Giải quyết xung đột giữa các quyền
Course ILT
Khái quát về tính bảo mật trong
SQL Server
Mỗi database nên có 1 hệ thống bảo mật đáng tin cậy
(reliable security system) để giám sát mọi hoạt
động cũng như các thông tin cần được xem và chỉnh sửa
Một hệ thống bảo mật đáng tin cậy phải
bảo đám được việc bảo vệ dữ liệu bất kể
việc user đã dùng cách nào để truy xuất
vào database. SQL áp dụng các quyền
bảo mật vào các mức: mức database,
mức các đối tượng và mức các cột của
bảng
Login ID và user ID
Course ILT
Cần phân biệt Login ID và user ID:
– Người dùng muốn truy xuất vào Microsoft SQL Server, thì phải
có login ID và password. Nhưng login ID chính nó khơng cho
phép nguời dùng quyền truy xuất đến các DB. Muốn tạo login
ID, dùng lệnh
sp_addlogin
– User ID nhận dạng người dùng trong 1 DB. Tất cả các quyền và
chủ quyền của các đối tượng trong DB đều được điều khiển bởi
user ID. Ví dụ user ID là xyz trong DB sales khác với user ID
cũng tên là xyz trong DB inventory.
Course ILT
Login ID và user ID
Một login ID phải kết hợp với 1 user ID
trong mỗi DB để truy xuất dữ liệu trong
DB. Nếu login ID không được kết hợp
tường minh với 1 user ID thì nó sẽ kết
hợp với user ID là guest. Nều DB khơng
có user ID guest thì khơng thể truy xuất
vào DB được
– sa là 1 tài khoản đăng nhập (login account)
được ánh xạ tự động với user ID dbo trong mọi
DB.
– Guest là user ID đặc biệt
Việc quản trị sẽ dễ dàng hơn nếu login
ID và user ID giống nhau nhưng điều này
không bắt buộc.
Course ILT
Authentication &Authorization
User có thể truy xuất vào DB thông qua 1
account đăng nhập (login ID) hợp lệ , nhờ
đó user có khả năng kết nối vào database
server. Quá trình này được gọi là
authentication(xác thực).
Tài khoản đăng nhập (Login ID) sẽ được
ánh xạ với tài khoản user ( user ID) để cho
phép user được quyền truy xuất trong 1 DB.
Quá trình này gọi là authorization (cấp
phép) (hay permission validation). User
sẽ không thể truy xuất vào DB ngay cả khi
họ có tài khoản đăng nhập (login ID ) hợp
lệ.
Tạo Login ID
Course ILT
Sử dụng tài khoản đăng nhập của chính Windows như tài
khoản đăng nhập vào SQL server.
– Sử dụng thủ tục sp_grantlogin
Tạo 1 tài khoản đăng nhập của riêng SQL server
– Sử dụng thủ tục sp_addlogin
Gán user của Windows
Cú pháp
Course ILT
sp_grantlogin [@loginame =] 'login‘
Ví dụ: muốn có thể đăng nhập vào SQL server bằng account
của Windows là user1, ta dùng lệnh sau:
sp_grantlogin ‘user1’
Course ILT
Tạo User login của SQL server
Chỉ có người quản tri (administrator)
mới có quyền tạo login ID mới.
Cú pháp
sp_addlogin [ @loginame = ] 'login'
[ , [ @passwd = ] 'password' ]
[ , [ @defdb = ] 'database' ]
Ví dụ:
EXEC sp_addlogin ‘student1','Password','master'
Xem các login ID
Course ILT
Dùng thủ tục sp_helplogins
Course ILT
Tạo user cho DB hiện hành
Để thêm 1 tài khoản (ID) cho 1 user mới vào DB
hiện hành
Cú pháp:
sp_adduser [ @loginame = ] 'login'
[ , [ @name_in_db = ] 'user' ]
[ , [ @grpname = ] 'group' ]
Chú ý: chỉ có thể tạo user mới cho những user
nào đã có tài khoản đăng nhập (login ID)
‘login‘: xác định login id của user
'user‘ là tên của user mới. Nếu tuỳ chọn này
không được xác định, tên của user sẽ chính là
tên login id của user đó. Có thể tạo ra tài khoản
user khác với tên login id của user đó.
'group‘ là nhóm hay role mà user mới này sẽ tự
động trở thành thành viên của nhóm.
Có thể tạo user mới từ Enterprise Manager
Course ILT
Role là gì?
Role là một cơng cụ cực mạnh cho phép ta
tập hợp các user vào cùng 1 unit nhờ đó ta
có thể gán quyền chung cho cả unit đó.
Tương tự như trong 1 cơng ty, ta có thể
tập hợp các cơng nhân làm cùng 1 cơng
việc lại 1 nhóm, nhờ đó ta có thể giao việc,
cấp quyền cho cả nhóm. Mọi thành viên
trong nhóm sẽ có quyền như nhau. Nếu
chức năng của nhóm thay đổi, ta chỉ đơn
giản thay đổi quyền của nhóm, khi đó
những thay đổi này sẽ được tự động áp
dụng cho tất cả các thành viên trong
nhóm.
Course ILT
Vai trò của role
Để dễ quản lý 1 DB, nên xác định 1 tập
hợp các role dựa theo yêu cầu công việc
và gán mỗi role những quyền hạn
(permission) khác nhau. Sau đó, chỉ cần
chuyển các user vào các role thích hợp
hơn là phải cấp quyền cho mỗi user
riêng lẻ. Nếu công việc thay đổi. chỉ cần
thay đổi quyền trong mỗi role thì những
thay đổi này sẽ tự động được áp dụng
cho toàn bộ các thành viên của role đó.
Các user có thể là thành viên của nhiều
role
Course ILT
Ví dụ minh hoạ
Giả sử có CSDL là courses, sau khi người
quản trị cho phép 5 tài khoản Windows bao
gồm giáo sư John, Sarah, Diane và 2 sinh
viên Betty và Ralph được đăng nhập vào
SQL server. Đặc biệt là Diane vừa là giáo
sư nhưng lại vừa theo học 1 lớp khác.
Người quản trị cần cấp cho các giáo sư
quyền được update điểm sinh viên, cịn
các sinh viên thì chỉ được xem điểm của
họ. Người quản trị đã tạo ra 2 view có tên
là ProfessorGradeView dành cho giáo sư,
và StudentGradeView dành cho sinh viên.
Script của người quản trị nên có nội dung
như thế nào??
Course ILT
USE master
GO
sp_grantlogin 'NETDOMAIN\John'
GO
sp_defaultdb 'NETDOMAIN\John', 'courses‘
GO
sp_grantlogin 'NETDOMAIN\Sarah'
GO
sp_defaultdb 'NETDOMAIN\Sarah', 'courses'
GO
sp_grantlogin 'NETDOMAIN\Betty'
GO
sp_defaultdb 'NETDOMAIN\Betty', 'courses'
GO
Course ILT
sp_grantlogin 'NETDOMAIN\Ralph'
GO
sp_defaultdb 'NETDOMAIN\Ralph', 'courses'
GO
sp_grantlogin 'NETDOMAIN\Diane'
GO
sp_defaultdb 'NETDOMAIN\Diane', 'courses'
GO
USE courses
GO
sp_grantdbaccess 'NETDOMAIN\John‘
GO
sp_grantdbaccess 'NETDOMAIN\Sarah'
GO
sp_grantdbaccess 'NETDOMAIN\Betty'
GO
sp_grantdbaccess 'NETDOMAIN\Ralph'
GO
sp_grantdbaccess 'NETDOMAIN\Diane'
GO
Course ILT
sp_addrole 'Professor'
GO
sp_addrole 'Student'
GO
sp_addrolemember 'Professor', 'NETDOMAIN\John‘
GO
sp_addrolemember 'Professor', 'NETDOMAIN\Sarah‘
GO
sp_addrolemember 'Professor', 'NETDOMAIN\Diane‘
GO
sp_addrolemember 'Student', 'NETDOMAIN\Betty‘
GO
sp_addrolemember 'Student', 'NETDOMAIN\Ralph'
GO
sp_addrolemember 'Student', 'NETDOMAIN\Diane'
GO
Course ILT
GRANT SELECT ON StudentGradeView TO
Student
GO
GRANT SELECT, UPDATE ON
ProfessorGradeView TO Professor
GO
Course ILT
Các loại User Roles
Trong SQL server khơng có group. Tuy nhiên ta có thể quản lý
việc bảo mật của SQL server thơng qua các group của
Windows.
Các nhóm của Windows có thể được dùng như là các role của
SQL server.
Có 2 loại user roles đã được định nghĩa sẵn trong SQL Server
2000:
• Fixed Server Roles
• Database Roles
Course ILT
Fixed Server Roles
Hạn chế khả năng truy xuất vào các
CSDL riêng lẻ sau khi user đăng nhập
vào.
Có 8 loại server roles. Danh sách sau liệt
kê các loại này mà khả năng quản trị
theo thứ tự giảm dần.
– sysadmin: quyền tối đa mà không bị bất kỳ 1 hạn chế nào. Mặc
định, tất cả các thành viên của nhóm quản trị Windows
(Administrators)và user sa thuộc vào server role này
– serveradmin: có quyền cấu hình mức server như xác lập lượng
bộ nhớ mà SQL server có thể dùng khi truyền thông tin qua
mạng.
Fixed Server Roles
ó quyền thực thi replication và
quản trị các thủ tục (extended stored
Course ILT
– setupadmin: c
procedures).
điều hành bảo mật như
tạo login và gán quyền.
processadmin: có quyền kết thúc các tiến
trình được gọi khơng hợp lệ
dbcreator: tạo và chỉnh sửa database
– securityadmin:
–
–
Fixed Server Roles
– diskadmin: thực hiện các hoạt động sao lưu như sao chép
Course ILT
đĩa và tạo các thiết bị sao lưu
– bulkadmin: thực hiện lệnh BULK INSERT
Lưu ý: Một thành viên của bất kỳ server
role nào đều có thể thêm các user khác
vào chính server role đó.
Để xem các fixed server roles:
sp_helpsrvrole
Để xem quyền của mỗi role
sp_srvrolepermission
Course ILT
Fixed Server Roles
Để gán 1 user vào 1 fixed server role, ta
có thể dùng lệnh sau
Cú pháp:
sp_addsrvrolemember [ @loginame = ] 'login',
[ @rolename = ] 'role‘
Ví dụ 1: gán user1 vào nhóm sysadmin
EXEC sp_addsrvrolemember 'User1',
'sysadmin‘
Ví dụ 2: thêm user của Windows NT
Corporate\HelenS vào role sysadmin
EXEC sp_addsrvrolemember
'Corporate\HelenS', 'sysadmin'
Course ILT
Database roles
Mỗi Database có một bộ các fixed database
roles. Phạm vi của mỗi role này là chỉ trong
từng database riêng rẽ.
Ví dụ: nếu Database1 và Database2 cả hai đều
có 1 user ID là UserX. Nhưng UserX trong
Database1 thuộc fixed database role tên là
db_owner. Role này không ảnh hưởng gì đến
UserX trong Database2 khi user này là thành
viên của role có tên là db_owner.
Database roles cho phép bạn gán quyền cho 1
nhóm các user thay vì phải gán quyền cho từng
user riêng lẻ.
Có 3 loại database roles:
• Fixed
• Custom
• Application
Fixed Database Roles
Course ILT
DatabaseRole
Mơ tả
db_owner
Có tất cả các quyền trong DB
db_accessadmin
Thêm hay xóa các user ID
db_securityadmin
Quản lý tất cả các role và
permission trong DB,có thể thay đổi
chủ quyềnower (ownership)
db_ddladmin
Có thể thực hiện tất cả các lệnh
DDL nhưng không thể sử dụng các
lệnh GRANT, REVOKE hay DENY
db_backupoperator Có thể thực hiện các lệnh DBCC,
CHECKPOINT và BACKUP.