Khi user này được tạo ra trong một database, các login chưa có tài khoản user trong database này cũng sẽ truy cập vào được.. Cấp quyền thao tác trên đối tượng (tt)[r]
(1)1 Nội dung
• Trigger
• Khung nhìn
• Quản trị quyền người dùng
(2)Giới thiệu
• SQL Server hỗ trợ chế đa người dùng
• Cơ chế quản trị người dùng:
– Cung cấp quản lý tài khoản truy cập (login) mà người sử dụng dùng để kết nối với SQL Server
(3)3 Các chế độ chứng thực (Authentication modes)
• Chứng thực: (khái niệm)
– Xác nhận xem tài khoản truy cập login có hợp lệ
khơng i.e có phép kết nối với SQL server hay
khơng
• Các chế độ chứng thực: – Chứng thực SQL
Server (SQL Server Authentication)
– Chứng thực tích hợp từ Windows (Windows
Authentication: integrated security/ trusted
(4)Các chế độ chứng thực (tt)
• Chứng thực SQL Server:
– SQL Server tự quản lý tên tài khoản (login name) mật (password)
(5)5 Các chế độ chứng thực (tt)
• Chứng thực Windows
– Giữa Windows SQL Server thực việc cấp phép cho người dùng Windows kết nối đến SQL Server Windows quản lý tài khoản người
dùng thực việc chứng thực người dùng đăng nhập vào Windows
Khi người dùng kết nối đến SQL Server sử dụng chế độ Window Authentication, SQL Server xét xem người dùng Windows cấp phép vào SQL Server hay chưa
Admin hệ điều hành mà SQL Server
(6)Cấu hình chế độ chứng thực
• Lựa chọn:
– Chỉ dùng Windows Authentication
– Mixed mode (sử dụng hai chế độ chứng thực)
• Thực cấu hình lúc: – Cài đặt
– Thay đổi sau cài đặt: dùng Enterprise Manager:
Phải chuột lên tên Server cửa sổ duyệt bên trái
Chọn Properties
(7)(8)Khái niệm login user
• Login:
– Là tài khoản mà người sử dụng dùng để kết nối với SQL Server
– Một login có quyền truy cập 0-n database
(9)9 Khái niệm login user (tt)
• User:
– Một “người dùng” database cụ thể – Một user ứng với login
Login: pnthao
db QLSV – user QuanTriVien1
(10)Cấp quản lý login
• Login cấp quản lý quản trị hệ thống SysAdmin quản trị an ninh SecurityAdmin của SQL Server
• Lệnh tạo login
sp_addLogin [ @loginame = ] ‘login_name’ [ , [ @passwd = ] 'password' ]
[ , [ @defdb = ]‘default_database’ ]
– Ví dụ
(11)11 Cấp quản lý login (tt)
• Lệnh cấp quyền truy cập (grant login)
– Cấp phép một nhóm người dùng Windows (Windows user/ group) kết nối đến SQL Server
– Cú pháp:
sp_grantLogin [@loginame =] ‘windows_account’
(windows_account có dạng Domain\User)
– Ví dụ:
exec sp_grantLogin ‘Server01\user01’
– Sau cấp quyền, tài khoản Windows sử dụng login SQL Server
(12)Cấp quản lý login (tt)
• Một số thủ tục liên quan
– sp_helpUser [loginName]: xem tài khoản login có,
hoặc xem chi tiết tài khoản login (đối với database hành)
– sp_password: đổi password login
– sp_defaultDb: đổi database mặc định login
– sp_dropLogin: xóa login cấp thủ tục sp_addlogin
– sp_revokeLogin: lấy lại quyền truy cập cấp cho người dùng/nhóm người dùng Windows thủ tục sp_grantLogin
(13)13 Tạo quản lý user
• Tạo user == cấp cho login quyền truy cập vào database hành
• Cú pháp:
sp_grantDbAccess
[@loginame =] ‘login_name’
[,[@name_in_db =] ‘user_name’ [OUTPUT]]
– Nếu không xác định tham số „user_name‟, „login_name‟ tự động sử dụng cho „user_name‟
– Thủ tục sp_grantDbAccess chỉ thực thành
(14)Tạo quản lý user (tt)
• Ví dụ
exec sp_grantDbAccess ‘Nam’, ‘dev01’
exec sp_grantDbAccess ‘Server01\user01’, ‘dev02’
• Xóa user khỏi database hành – Cú pháp
sp_revokeDbAccess ‘user_name’
– Ví dụ:
(15)• Lệnh tạo user khác (được khuyến khích dùng thay cho sp_grantdbaccess)
• Cú pháp :
Create user user_name For | From
Login login_name
• Ví dụ :
– Create user dev01 for login Nam – Create user dev02 from login Nam
• Xóa user :
– Cú pháp: drop user user_name – Ví dụ: drop user dev01
(16)Khái niệm vai trò (role)
– Sau tạo user: user có quyền truy cập vào database,
nhưng chưa thực thao tác (đọc, cập nhật, …) đối tượng database chưa cấp quyền
Cần gán quyền cụ thể cho user database
Nếu nhiều user cần cấp cho số quyền giống nhau: tạo role, gán quyền cho role User cần quyền
chỉ cần đăng ký thành viên role được tạo
Role = Nhóm user/login
Mặc định, user thành viên role
hưởng tất quyền cấp cho role Tuy nhiên, thành viên
(17)17 Các vai trị có sẵn
• SQL Server định nghĩa cấp quyền sẵn cho số vai trò
role, bao gồm:
– Vai trò hệ thống: chung cho tồn server Một số vai trị hệ thống định sẵn:
SysAdmin, SecurityAdmin
DbCreator
…
– Vai trò database: riêng database Các vai trò database định sẵn:
db_owner
db_securityAdmin, db_accessAdmin
db_dataReader, db_dataWriter
(18)Định nghĩa vai trò Role
• Người dùng tự định nghĩa vai trò cho database hành
• Cú pháp
sp_addRole
[ @rolename = ] 'role'
[ , [ @ownerName = ] 'owner' ]
(19)19 Định nghĩa vai trò (tt)
• Ví dụ:
exec sp_addRole ‘Developer’
exec sp_addRole ‘Developer’, ‘dbo’
Ghi chú: Khi login thành viên vai trò quản trị
hệ thống SysAdmin vào SQL Server, login có quyền truy cập vào tất database có tên user tương ứng database “dbo”
• Xố role tạo:
sp_dropRole ‘role’
• Xem role tạo / chi tiết role:
(20)Thêm thành viên vào role
• Thêm login vào role hệ thống có sẵn: – Cú pháp:
sp_addSrvRoleMember [ @loginame = ] ‘login’
,[ @rolename = ] ‘role’
– Ví dụ:
exec sp_addSrvRoleMember ‘pnthao’, ‘SysAdmin’
• Ghi chú: Khi cài đặt, SQL Server định nghĩa sẵn login sa
sa login administrator Windows thành viên
(21)21 Thêm thành viên vào role (tt)
• Thêm thành viên vào vai trò (định nghĩa sẵn hoặc người dùng khai báo) database hành :
– Cú pháp:
sp_addRoleMember
[ @rolename = ] ‘role’
, [ @membername = ] ‘security_account’ „security_account’ = user_name | role
– Ví dụ:
(22)Các user role đặc biệt database
• Trong database có user/role đặc biệt:
– dbo: user định sẵn, ứng với login thành viên
vai trò quản trị hệ thống SysAdmin Login có quyền truy cập thực thao tác tất
database
– public: role định sẵn database, tất
quyền gán cho “public” tất user database thừa hưởng
– guest: user ứng với login không cấp
(23)23 Cấp quyền cho user / role
• Sử dụng lệnh “Grant …” để cấp quyền cho user / role
• Có hai dạng:
– Cấp quyền thực lệnh (create database, create procedure, create table,…)
(24)Cấp quyền thực lệnh
• Cú pháp:
GRANT { ALL|statement[, n] }
TO security_account [, n] Trong đó:
– statement = create database | create table | create view | create rule | create procedure | backup database | …
– security account = user | role
• Ví dụ:
(25)25 Cấp quyền thao tác đối tượng
• Cú pháp GRANT
{ ALL | permission[, n] }
{ [(column[, n])] ON {table|view} | ON {table|view} [(column[, n])]
| ON {stored_procedure}
| ON {user_defined_function} }
TO security_account [, n]
(26)Cấp quyền thao tác đối tượng (tt)
– Permission = select|insert|delete|update
|references|execute
– WITH GRANT OPTION: cho phép user cấp quyền thao tác cho user/ role khác
(27)27 Cấp quyền thao tác đối tượng (tt)
• Ví dụ 1:
Grant select, update
on SinhVien (HoTen, DiaChi, NgaySinh)
to Developer
Thành viên
Developer có quyền select, update cột HoTen, DiaChi NgaySinh
(28)Cấp quyền thao tác đối tượng (tt)
• Ví dụ 2:
Grant select, update
on SinhVien (HoTen, DiaChi, NgaySinh)
to Developer
with grant option
Thành viên
Developer có quyền select, update cột HoTen, DiaChi NgaySinh
bảng SinhVien
Và phép cấp quyền cho user khác
(29)29 Cấp quyền thao tác đối tượng (tt)
• Ví dụ (tiếp vd2):
Login „Nam‟ kết nối đến SQL Server truy cập vào database QLSV:
Trong QLSV, „Nam‟ có tên user „dev01‟, thành viên vai trò Developer
„Nam‟ muốn cấp quyền select SinhVien (HoTen, DiaChi) cho user „sv01‟ khơng thuộc vai trị Developer?
(30)Từ chối quyền user/ role
• Dùng Deny để từ chối quyền user/role – Khi user/role bị từ chối quyền, khơng
được thừa hưởng quyền dù thành viên role có quyền
– Cú pháp: Có hai dạng tương tự Grant:
Từ chối quyền thực lệnh
(31)31 Từ chối quyền thực lệnh
• Cú pháp:
DENY { ALL | statement [, n] } TO security_account [, n] • Ví dụ
(32)Từ chối quyền thao tác đối tượng
• Cú pháp
DENY
{ ALL | permission [, n] }
{ [ ( column [, n] ) ] ON { table | view } | ON { table | view } [ ( column [, n] ) ] | ON { stored_procedure}
| ON { user_defined_function } }
(33)33 Từ chối quyền thao tác đối tượng (tt)
• Ghi chú:
– Nếu security_account cấp (grant) trực tiếp quyền với “with grant option”, phải định cascade deny (từ chối quyền tất user/role security_account cấp quyền này)
• Ví dụ
Deny select, update
on SinhVien (HoTen, DiaChi, NgaySinh)
(34)Khôi phục quyền cấp/ từ chối
• Dùng revoke để khôi phục quyền cấp bỏ việc từ chối quyền user/role
– Nếu user/ role cấp (grant) quyền, revoke
quyền làm hiệu lực lệnh grant trước – Nếu user/ role bị từ chối (deny) quyền, lệnh
revoke quyền user/ role gỡ bỏ hiệu lực lệnh deny
• Có hai dạng tương tự grant – Quyền thực lệnh
(35)35 Lấy lại/ bỏ từ chối quyền thực lệnh
• Cú pháp:
REVOKE { ALL | statement [, n] }
From security_account [, n] • Ví dụ:
(36)Lấy lại/ bỏ từ chối quyền thao tác đối tượng
• Cú pháp
REVOKE{ ALL | permission [, n] }
{ [ ( column [, n] ) ] ON { table | view } | ON { table | view } [ ( column [, n] ) ] | ON { stored_procedure}
| ON { user_defined_function } }
FROM security_account [, n] [CASCADE]
(37)37
Lấy lại/ bỏ từ chối quyền thao tác đối tượng
• Ví dụ:
Revoke select, update
on SinhVien (HoTen, DiaChi, NgaySinh)
from Dev02
Revoke update
on SinhVien (HoTen, DiaChi, NgaySinh)
(38)• Xem lệnh/thao tác cấp
– select * from sys.database_permissions
(39)HẾT