Bảo mật SQL
Lời nói đầu
SQL Server 7.0 ra đời là 1 bước nhảy vọt công nghệ CSDL so với CSDL SQL Server
6.5, SQL Server 2000 ra đời không ngừng cung cấp cho người dùng những công cụ và
những đặc điểm mới phiên bản 7.0 còn thiếu sót.
Ngoài những đặc tính khắc phục thiếu sót của SQL Server 7.0, phiên bản SQL Server
2000 còn thay đổi 1 số cục diện khác trong các chức năng lập trình cũng giống như trong
quan hệ và ràng buộc dữ liệu.
Ngoài ra SQL Server 2000 còn cung cấp 1 số công cụ hỗ trợ khác như Phân tích xử lí
trực tuyến (OLAP), chuyển tác trực tuyến (OLPT), English Query…
Tìm hiểu về SQL Server là 1 mảng đề tài rộng, bao gồm kỹ năng lập trình, kỹ thuật ứng
dụng SQL vào ứng dụng thực tiễn, các mô hình CSDL, kĩ thuật mới của SQL Server
2000, quản trị CSDL, bảo mật…. Trong phạm vi đề tài này chỉ tìm hiểu về bảo mật trong
SQL Server.
Trần Kỳ Nam Page 1 8/23/2014
Bảo mật SQL
Mục lục
Lời nói đầu 1
Mục lục 2
1. Giới thiệu 3
1.1. Khái niêm cơ bản về bảo mật 3
1.2. Giới thiệu chung về bảo mật trong SQL Server 4
2.Quản lí việc đăng nhập 4
2.1.Xác nhận việc đăng nhập 4
2.2.Sự xác nhận quyền 5
2.3.Tạo 1 đăng nhập 5
3.Quản lí người dùng 9
3.1Người dùng của SQL Server 9
3.2.Mối quan hệ giữa người dùng CSDL và tên đăng nhập 10
3.3.Quản lí tên người dùng và tên đăng nhập 10
4.Quyền người dùng (User Right) 10
và phương tiện để bảo mật dữ liệu. Trong đề tài này 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 1 cách chi tiết bảo mật được cung cấp như thế nào trong
SQL Server.
1.1.Khái niệm cơ bản về bảo mật
Bảo mật có rất nhiều khái niệm, cho phép người quản trị CSDL tự ra quyết định cho phép
hay không cho phép người dùng truy cập và thao tác trên CSDL sao cho có hiệu quả bảo
mật tốt nhất. Dưới 1 góc độ nào đó, người quản trị dựa trên nền tảng lí thuyết bảo mật
của hệ CSDL đa người dùng nhằm tìm ra những phương pháp bảo mật theo đúng với nhu
cầu của độ bảo mật dữ liệu.
Với mục đích tăng tính bảo mật dữ liệu, SQL Server 2000 hỗ trợ các tính năng cho phép
nhà quản trị thiết lập cợ chế bảo vệ CSDL trong môi trường đa người dùng, bao gồm các
yếu tố chính sau:
- Vai trò của người dùng trong hệ thống và CSDL
- Quyền sử dụng các ứng dụng CSDL trong SQL Server
- Quyền tạo và sửa đổi cấu trúc các đối tượng CSDL
- Quyền truy cập, xử lí dữ liệu
Khi đăng nhập vào 1 hệ thống CSDL đa người dùng, ngưới sử dụng cần phải cung cấp
UserID và Password. Dựa trên UserID hệ thống có khả năng kiểm soát tát cả các hành vi
của người sử dụng trên CSDL SQL Server 2000.
Để làm được chức năng này, người quản trị CSDL cần phải thiết lập các quyền xử lý và
truy cập vào CSDL khhi tạo ra UserID này, ngoài ra còn 1 số thuộc tính khác của SQL
Server như quyền bakup dữ liệu, trao đổi dữ liệu với các ứng dụng CSDL khác…
Khi nói đến bảo mật, ta cần quan tâm dến tên tài khoản, mật khảu, chiều dài, thời gian có
hiệu lực… như sau:
- Một người sử dụng chỉ có 1 UserID và 1 Password.
Trần Kỳ Nam Page 3 8/23/2014
Bảo mật SQL
- Thời gian có hiệu lực của mật khẩu.
- Chiều dài của mậ khẩu có giới hạn <= 36.
- Giới hạn người sử dụng theo license hay mở rộng.
quản lí của SQL Server định nghĩa 1 tài khoản đăng nhập và mã cho 1 SQL
Server. Những người dùng cần phải đưa ra cả tài khoản và mã dể kết nối với SQL
Server.
- Windows NT Authentication : Khi 1 người dùng kết nối với SQL Server sử
dụng Windows NT authentication, SQL Server kiểm lại với Windows NT xem tài
khoản và mã đã đúng chưa.Nếu đúng thì người dùng có thể kết nôi với SQL
Server.
- Mixed Mode Authentication: Người dùng có thể sử dụng 1 trong 2 loại trên.
2.2.Sự xác nhận quyền:
Trong mỗi CSDL, quyền được gán cho tài khoản của người dùng và các vai trò được tạo
ra để thực hiện ( hoặc ngăn cấm) những hành động cụ thể. SQL Server chấp nhận các
lệnh sau khi người dùng đã truy cập thành công tới CSDL.
SQL Server thực hiện các bước sau trong khi xác nhận quyền:
1. Khi người dùng thực hiện 1 hành động, ví dụ như thực hiện 1 câu lệnh T-SQL,câu
lệnh này được chuyển tới SQL Server
2. Khi SQL Server nhận được câu lệnh, nó kiểm tra em người dùng có quyền thực
hiện câu lệnh hay không.
3. Sau đó, SQL Server thực hiện 1 trong 2 hành động sau:
- Nếu người dùng có quyền, SQL Server thực hiện câu lệnh.
- Nếu người dùng không có quyền, SQL Server báo lỗi.
Sử dụng Enterprise Manager, ta có thể chọn kiểu xác nhận như là Windows
Authentication và Mixed mode authentication
2.3.Tạo 1 đăng nhập:
Sử dụng Enterprise Manager ta có thể quản lí việc đăng nhập bằng việc sử dụng Create
Login Wizard cung cấp bởi SQL Server Enterprise Manager. Quá trình(Wizard) này cung
Trần Kỳ Nam Page 5 8/23/2014
Bảo mật SQL
cấp 1 sự hướng dẫn từng bước hoàn chỉnh để tạo các đăng nhập 1 cách dễ dàng và hiệu
quả.
Bên cạnh đó ta cũng có thể sử dụng các thủ tục thường trú( stored procedures) để tạo hay
EXEC sp_droplogin ‘Nam’
Sử dụng trình điều khiển EM
Trần Kỳ Nam Page 6 8/23/2014
Bảo mật SQL
Để tạo ra 1 tài khoản đăng nhập (Login User), bắt đầu từ màn hình Enterprise Manager
(EM), sau đó chọn ngăn Security/Login, right click chọn New Login hay chọn menu
action New Login như trong hình sau:
Như đã trình bày ở trên, có 2 lựa chọn khi tạo một người dùng trong SQL Server 2000:
- Tương tác với hệ điều hành Windows NT/2000
- Sử dụng riêng cho SQL Server 2000
Trong hình sau, dễ dàng nhận thấ khi chọn Windows NT authentication thì tham số tên
miền của chúng yêu cầu, rõ ràng ta phải cung cấp tên miền hay địa chỉ TCP/IP của máy
chủ, mặt khác tài khoản người dùng này phải tồn tại và có hiệu lực tên mạng.
Trần Kỳ Nam Page 7 8/23/2014
Bảo mật SQL
Sau khi tạo, SQL Server 2000 kiểm tra. Tài khoản người dùng có hợp lệ hay không, có
tồn tại trên hệ điều hành Windows NT/2000 hay không. Nếu tất cả thông tin hợp lệ, đăng
ký thành công.
Trong trường hợp ta muốn tài khoản đó có giá trị hiệu lực trong SQL Server 2000, chọn
SQL Server authentication như hình sau:
Trần Kỳ Nam Page 8 8/23/2014
Bảo mật SQL
Ghi chú:
-Trong trường hợp sử dụng Tài khoản người dùng chung NT và SQL Server, nếu
người dùng sử dụng tài khoản loại này họ có thể xóa dữ liệu trên mạng.
-Tùy vào quan điểm quản lý, nhà quản trị tự thiết lập hệ thống người dùng sao cho
phù hợp với chiến lược bảo mật dữ liệu công ty.
3.Quản lí người dùng:
SQL Server cho phép 2 loại tài khoản người dùng sau:
- Người dùng hệ thống( system user)
4. sp_revokedbaccess dùng để xóa 1 tài khoản ra khỏi CSDL.
4.Quyền người dùng (User Right):
Quyền người dùng được định nghĩa như mức độ người dùng có thể hay không thể thực
thi trên cơ sở dữ liệu, quyền được chia thành 4 loại như sau:
- Quyền truy cập vào SQL Server 2000.
- Quyền truy xuất vào cơ sở dữ liệu
- Quyền thực hiện trên các đối tượng của cơ sở dữ liệu
- Quyền xử lý dữ liệu
4.1.Cấp phát quyền truy cập vào cơ sở dữ liệu:
Điều đầu tiên cần phải thực hiện khi cho phép người sử dụng truy cập vào cơ sở dữ liệu
là cấp phát quyền, có 2 cách để thực hiện việc cấp phát quyền này, bao gồm việc thực
hiện 1 thủ tục có sẵn hay sử dụng trình điều khiển EM, bằng cách thêm người sử dụng
vào thành viên người dùng của cơ sở dữ liệu.
Trần Kỳ Nam Page 10 8/23/2014
Bảo mật SQL
Sử dụng thủ tục
Để cấp phát quyền người sử dụng vào truy cập cơ sở dữ liệu bằng thủ tục, phải có cú
pháp như sau:
Exec sp_grantdbaccess
[@loginname=] < ‘ login’ >
[ , [@name_in_db=] ] < ‘ name in this db’ >
Nếu không chỉ rõ cơ sở dữ liệu muốn cho phép người dùng truy cập, thì người sử dụng
được cấp phát quyền trên cơ sở dữ liệu hiện hành, với tham số @loginname là tài khoản
của người sử dụng đăng nhập vào SQL Server 2000.
Tham số @name_in_db cho phép ánh xạ hay còn gọi là bí dang tên của tài khoản người
dùng thành 1 tên khác khi truy cập vào cơ sở dữ liệu chỉ định, trong trường hợp này SQL
Server 2000 chỉ quản lý trên tên tài khoản đăng nhập.
Với cách này, khi sử dụng các ứng dụng khác truy cập vào cơ sở dữ liều SQL Server
2000, dĩ nhiên ứng dụng sẽ kết nối cơ sở dữ liệu chỉ định, thì tài khoản dùng để kết nối
vẫn là tên Tài khoản đăng nhập vào SQL Server 2000.
-Chọn tên tài khoản trong danh sách tài khoản (login user) đăng nhập SQL Server
2000.
-Nếu cần thiết tạo tên bí danh (Alias)
Màn hình trình EM cho phép cấp phát quyền 1 tài khoản đăng nhập SQL Server 2000 vào
cơ sở dữ liệu chỉ định có dạng sau:
Trần Kỳ Nam Page 12 8/23/2014
Bảo mật SQL
Sau khi cấp phát quyền cho 1 tài khoản đăng nhập, chọn OK để kết thúc.
Trong trường hợp cần loại bỏ người sử dụng mya ra khỏi cơ sở dữ liệu account, chỉ cần
chọn ngăn Users/R-Click / Delete hay chọn menu Action / Delete, cửa sổ xác nhận hiển
thị, chỉ cần bấm OK, người sử dụng sẽ loại bỏ.
4.2.Cấp phát quyền thực thi trên cơ sở dữ liệu:
Sau khi cấp quyền cho phép người sử dụng truy cập vào cơ sở dữ liệu account, bước kế
tiếp bạn phải cho phép người sử dụng đó có quyền truy cập và xử lý trên các đối tượng,
cũng như xử lý dữ liệu trên các đối tượng đó.
Ví dụ trong bộ phận kế toán, nhân viên kế toán hay nhân viên nhập dữ liệu thì không thể
xem xét các dữ liệu về quyết toán thuế, hay các báo cáo tài chính chẳng hạn. Tương tự
như vậy, nhân viên kinh doanh không thể nhập dữ liệu các nghiệp vụ kế toán, với các quy
định về giới hạn truy cập và xử lý dữ liệu trên các đối tượng, SQL Server 2000 cung cấp
các quyền trên các đối tuợng như sau :
SELECT: Cho phép người dùng nhìn thấy dữ liệu, nếu người sử dụng có quyền này, thì
họ chỉ có thể thực thi những phát biểu Select để truy vấn dưc liệu trên các bảng hay View
được cho phép.
Trần Kỳ Nam Page 13 8/23/2014
Bảo mật SQL
INSERT: Cho phép người dùng thêm dữ liệu, nếu người dùng có quỳen này, họ có thể
thực hiện phát biểu Insert, đối với 1 hệ thống CSDL khác, muốn thực thi phát biểu Insert,
người dùng phải có quyền Select, trong trường hợp SQL Server 2000, quyền Insert không
liên quan đến quỳên truy vấn Select.
UPDATE: Quyền này cho phép người dùng chỉnh sử dữ liệu trong CSDL, với quyền
phép thực hiện phát biểu tạo bảng như ví dụ sau:
USE account
CREAT TABLE tblTest
(
a int,
b int
)
Kết quả trả về như sau:
Server: Msg 262, Level 14, State 1, Line 1
CREAT TABLE permission denied, database ‘account’, owner ‘dbo’.
Sau khi phân quyền tạo TABLE cho người dùng mya như ví dụ sau:
USE account
GRANT CREAT TABLE TO [mya]
GO
CREAT TABLE tblTest
(
a int,
b int
)
Kết quả trả về như sau:
The command(s) completed successfully.
The command(s) completed successfully.
Để loại các quyền trên của người sử dụng, ta cần phải sử dụng các thủ tục của hệ thống
DENY và REVOKE như phần trên.
5.2.Sử dụng trình điều khiển EM
Nếu sử dụng EM để phân quyền tạo các đối tượng của CSDL hiện hành, tực hiện theo
các bước tuần tự như sau:
- Chọn tên CSDL
- Nhấp phải, chọn Properties
- Chọn Tab Permission
6.1.Vai trò trên CSDL:
Có 1 vai trò trên CSDL rất đặc biệt : vai trò Public. Mỗi người dùng được định nghĩa
trong CSDL đều thuộc về vai trò Public. Nếu ta muốn mọi người trong 1 CSDL có 1
quyền nào đấy, ta phải gán quyền đó với vai trò public. Nếu 1 người dùng chưa được cấp
quyền trên 1 đối tượng, người đó sẽ dùng các quyền gán cho public. Vai trò Public hầu
như không có quyền nào ngoại trừ 1 quyền rất cơ bản là cho phép người dùng kết nối với
CSDL. Vai trò này có 1 số điều cơ bản:
- Nó ở trong mọi CSDL
- Nó không thể bị loại bỏ
- Mọi người dùng đều thuộc vai trò Public, kể cả tài khoản sa
- Vì mọi người dùng đều thuộc vai trò này(mặc định), ta không thể thêm hay bớt
người dùng cho vai trò này
1 số vai trò và quyền của chúng:
Db_owner: vai trò cho phép người dùng quyền được hoàn toàn kiếm soát CSDL. Tài
khoản sa là 1 thành viên của db_owner.
Db_securityadmin: vai trò cho phép 1 người dùng quản lí tất cả các vai trò và thành viên
của chúng, gán quyền cho các vai trò.
Db_accessadmin: cho phép người dùng thêm hoặc bớt người dùng trong CSDL.
Db_ddladmin: cho phép xử lí tất cả các đối tượng trong CSDL ( tạo, sửa, xóa… đối
tượng).
Db_backupoperator: cho phép thực hiện backup CSDL.
Db_datawriter: cho phép sửa dữ liệu ở các bảng do người dùng tạo trong CSDL.
Db_reader: cho phép xem dữ liệu ở các bảng do người dùng tạo trong CSDL.
Db_denydatawriter: ngăn việc sửa dữ liệu.
Db_denydatareader: ngăn việc xem dữ liệu.
1 người dùng đơn lẻ có thể thuộc 1, nhiều, hoặc không thuộc vai trò nào cả. Nếu 1 người
dùng thuộc nhiều hơn 1 vai trò, người dùng đó sẽ có tất cả các quyền của các vai trò đó.
Ta có thể tạo vai trò trên CSDL dùng Enterprise Manager hoặc sử dụng các thủ tục
thường trú hệ thống.
Giống như các đối tượng CSDL, ta cần đặt tên cho các vai trò.
[,[@ownername=] <’owner’>
@rolename là tên của vai trò trên bảng trên, ví dụ như tạo ra có 1 role tên là testrole, sau
đó gán 1 số quyền truy cập vào bảng dữ liệu vào role đó như ví dụ sau :
Use account
Go
EXEC sp_addrole ‘testrole’
Go
Grant select on tblsim to testrole
Go
Kết quả trả về như sau:
New role added.
Sau khi tạo 1 role mới có tên testrole và gán quyền truy vấn dữ liệu của bảng tblsim vào
role đó và sử dụng phát biểu select để truy vấn dữ liệu như ví dụ sau:
Use account
Go
Trần Kỳ Nam Page 19 8/23/2014
Bảo mật SQL
Select
Autoid
Cast(entrydate as varchar(11)) as entrydate,
invoiceNo,cast(invoiceDate as varchar(11)) as invoiceDate
from tblsim
order by invoiceDate desc
Kết quả trả về như sau:
Server: Msg 229, Level 14, State 5, Line 1
SELECT permission denied on object ‘tblsim’, database ‘account’, owner ‘dbo’.
6.4.Thêm 1 thành viên vào vai trò:
Thủ tục thêm 1 người sử dụng vào 1 role có cú pháp như sau:
Sp_addrolemember [@rolename]<role name>
EXEC sp_addsvrolemember ‘Home\Nam’,’sysadmin’
Để loại bỏ 1 người sử dụng ra khỏi role, sử dụng thủ tục sp_droprolemember có cú pháp
sau:
Sp_droprolemember [@rolename=] <’role name’>
[@membername=] <security account>
<security account> chính là tên tài khoản người sử dụng trong CSDL, sử dụng thủ tục
sp_droprolemember để loại bỏ người sử dụng mya ra khỏi CSDL account, thực hiện phát
biểu Select trên bảng tblsim, thông báo lỗi phát sinh trở lại như ví dụ sau:
Use account
Go
Exec sp_droprolemember testrole, ‘mya’
Go
Select
Autoid
Cast(entrydate as varchar(11)) as entrydate,
invoiceNo,cast(invoiceDate as varchar(11)) as invoiceDate
from tblsim
order by invoiceDate desc
go
Kết quả trả về như sau:
‘mya’ dropped from role ‘testrole’.
Server: Msg 229, level 14, State 5, Line 1
SELECT permission denied on object ‘tblsim’, database ‘account’, owner ‘dbo’.
7.Đối tượng CSDL và quyền với đối tượng:
1 CSDL là 1 tập hợp của dữ liệu, bảng và các đối tượng khác. Đối tượng CSDL giúp cho
việc cấu trúc dữ liệu và định nghĩa dữ liệu được rõ ràng.
Quyền cho phép người dùng thực hiện các hành động trong CSDL. Có 2 loại quyền : đối
tượng và phát biểu. Quyền đối tượng kiểm soát việc ai có thể truy cập và xử lí dữ liệu và
ai có thể chạy các thủ tục thường trú. Quyền phát biểu kiểm soát người dùng nào có thể
tạo và xóa đối tượng trong 1 CSDL.
- Revoke: ngăn người dùng làm việc với bảng.
- Deny: không cấp quyền cho người dùng.
Trần Kỳ Nam Page 22 8/23/2014
Bảo mật SQL
Sử dụng thủ tục hệ thống cấp quyền
Khi sử dụng thủ tục GRANT để cấp quyền truy cập và xử lí trên các đối tượng của CSDL
chỉ định theo cú pháp sau:
GRANT
ALL [PRIVILEGES] | <PERMISSION> [,…N]
ON
<table or view name>[(<column name>[,…n])]
| <stored or extension procedure name>
TO
<login or role name>[,…n]
[WITH GRANT OPTION]
[AS <role name>]
Từ khóa ALL cho phép cấp phát tất cả các quyền cho người sử dụng CSDL đó.
Chỉ rõ những bảng hay View nào cho phép người sử dụng truy cập và xử lí, hoặc thủ tục
hay thủ tục mở rộng.
Ví dụ: Cấp phát quyền bằng thủ tục GRANT
Use account
Go
/* Cấp quyền insert, update, delete cho người sử dụng mya trên bảng dữ liệu tblsim */
Grant insert,update,delete
On tblsim
To mya
Go
Kết quả trả về như sau:
The command(s) completed successfully.
Sau khi thực hiện thủ tục cấp phát quyền sử dụng, sử dụng phát biểu Select để truy vấn
Use account
Go
Select
Autoid
Cast(entrydate as varchar(11)) as entrydate,
invoiceNo,cast(invoiceDate as varchar(11)) as invoiceDate
from tblsim
order by invoiceDate desc
Kết quả trả về như sau:
Autoid EntryDate InvoiceNo InvoiceDate
11 dec 5 2001 inv0011 dec 10 2001
10 oct 18 2001 inv00010 dec 9 2001
9 oct 17 2001 inv009 dec 8 2001
2 oct 17 2001 inv002 dec 7 2001
3 oct 17 2001 inv003 dec 7 2001
4 oct 18 2001 inv004 dec 7 2001
5 oct 17 2001 inv005 dec 7 2001
6 oct 17 2001 inv006 dec 7 2001
7 oct 18 2001 inv007 dec 7 2001
8 oct 18 2001 inv008 dec 7 2001
1 oct 17 2001 inv001 dec 6 2001
Trần Kỳ Nam Page 24 8/23/2014
Bảo mật SQL
(11 row(s) affected)
Từ chối quyền truy vấn và xử lí dữ liệu
Nếu cần thiết không cho phép người sử dụng truy vấn và xử lí dữ liệu trên đối tượng, sử
dụng thủ tục Deny có cú pháp như sau:
DENY
ALL [PRIVILEGES] | <PERMISSION> [,…N]
from tblsim
order by invoiceDate desc
Kết quả trả về như sau:
Server: Msg 229, Level 14, State 5, Line 1
SELECT permission denied on object ‘tblsim’, database ‘account’, owner ‘dbo’
Trần Kỳ Nam Page 25 8/23/2014