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]
Trang 11
Nội dung
• Trigger
• Khung nhìn
• Quản trị quyền người dùng
• Sao lưu và phục hồi dữ liệu
Trang 2Giới thiệu
• SQL Server hỗ trợ cơ chế đa người dùng
• Cơ chế quản trị người dùng:
– Cung cấp và quản lý các tài khoản truy cập (login) mà
người sử dụng dùng để kết nối với SQL Server
– Phân quyền: người dùng chỉ được phép thực hiện
những thao tác mà họ được “cấp phép”
Trang 33
Các chế độ chứng thực (Authentication modes)
• Chứng thực: (khái niệm)
– Xác nhận xem một tài khoản truy cập login có hợp lệ
không i.e có đượ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 của SQL
Server (SQL Server Authentication)
– Chứng thực tích hợp từ
Windows (Windows Authentication: integrated security/ trusted
connection)
Trang 5 Windows quản lý các tài khoản của người
dùng và thực hiện việc chứng thực khi
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 chỉ xét xem người dùng này của
Windows đã được cấp phép vào SQL
Server hay chưa
Admin của hệ điều hành mà SQL Server
đang chạy trên đó luôn được phép vào SQL
Server với quyền SysAdmin
Trang 6Cấu hình chế độ chứng thực
• Lựa chọn:
– Chỉ dùng Windows Authentication
– Mixed mode (sử dụng cả hai chế độ chứng thực)
• Thực hiện cấu hình này lúc:
– Cài đặt
– Thay đổi sau khi đã cài đặt: dùng Enterprise Manager:
Phải chuột lên tên Server trong cửa sổ duyệt bên trái
Chọn Properties
Vào tab Securities
Trang 77
Cấu hình chế độ chứng thực (tt)
Trang 8Khái niệm login và 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ó thể có quyền truy cập 0-n database
– Trong mỗi database, một login sẽ ứng với một user
Trang 99
Khái niệm login và user (tt)
• User:
– Một “người dùng” trong một database cụ thể
– Một user ứng với một login
Login: pnthao
db QLSV – user QuanTriVien1
db QLTuyenSinh – user Dev1
Trang 10Cấp và quản lý login
• Login được cấp và quản lý bởi quản trị hệ thống
SysAdmin hoặc quản trị an ninh SecurityAdmin
Trang 1111
Cấp và quản lý login (tt)
• Lệnh cấp quyền truy cập (grant login)
– Cấp phép một hoặc một nhóm người dùng của Windows (Windows user/ group) được 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 khi được cấp quyền, tài khoản Windows có thể
được sử dụng như là 1 login của SQL Server
Tên máy
Trang 12Cấp và quản lý login (tt)
• Một số thủ tục liên quan
– sp_helpUser [loginName]: xem các tài khoản login hiện có,
hoặc xem chi tiết của một tài khoản login (đối với database hiện hành)
– sp_password: đổi password của login
– sp_defaultDb: đổi database mặc định của login
– sp_dropLogin: xóa login đã cấp bằng thủ tục sp_addlogin
– sp_revokeLogin: lấy lại quyền truy cập đã cấp cho một
người dùng/nhóm người dùng của Windows bằng thủ tục
sp_grantLogin
Trang 1313
Tạo và quản lý user
• Tạo user == cấp cho một login quyền truy cập vào
database hiện 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‟ sẽ tự động được sử dụng cho „user_name‟
– Thủ tục sp_grantDbAccess chỉ có thể được thực hiện bởi thành
viên của SysAdmin, db_owner và db_accessAdmin
Trang 14Tạo và quản lý user (tt)
• Ví dụ
exec sp_grantDbAccess ‘Nam’, ‘dev01’
exec sp_grantDbAccess ‘Server01\user01’, ‘dev02’
• Xóa user khỏi database hiện hành
Trang 15• Lệnh tạo user khác (được khuyến khích dùng thay
– 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
15
Trang 16Khái niệm vai trò (role)
– Sau khi tạo user: user sẽ có quyền truy cập vào database,
nhưng chưa thực hiện được thao tác gì (đọc, cập nhật, …)
trên các đối tượng trong database vì chưa được cấp quyền
Cần gán những quyền cụ thể cho từng user của database
Nếu nhiều user cần được cấp cho một số quyền giống nhau:
tạo role, gán các quyền đó cho role User cần các quyền này
chỉ cần đăng ký là thành viên của role được tạo
Role = Nhóm các user/login
Mặc định, các user thành viên của role sẽ được
hưởng tất cả những quyền đã cấp cho role Tuy nhiên, các thành viên này cũng có thể được cấp thêm các quyền riêng, hoặc bị từ chối một
Trang 18Định nghĩa vai trò Role mới
• Người dùng có thể tự định nghĩa các vai trò mới
cho database hiện hành
• Cú pháp
sp_addRole
[ @rolename = ] 'role'
[ , [ @ownerName = ] 'owner' ]
• Thủ tục sp_addRole chỉ có thể thực hiện bởi thành viên của
SysAdmin, db_owner, db_securityAdmin
Trang 1919
Định nghĩa vai trò mới (tt)
• Ví dụ:
exec sp_addRole ‘Developer’
exec sp_addRole ‘Developer’, ‘dbo’
hệ thống SysAdmin vào SQL Server, login này có quyền
truy cập vào tất cả các database và có tên user tương
ứng trong từng database là “dbo”
• Xoá một role đã tạo:
sp_dropRole ‘role’
• Xem các role đã tạo / chi tiết của 1 role:
sp_helpRole [‘role’]
Trang 20Thêm thành viên vào role
• Thêm một login vào các role hệ thống có sẵn:
– Cú pháp:
sp_addSrvRoleMember [ @loginame = ] ‘login’
– Ví dụ:
exec sp_addSrvRoleMember ‘pnthao’, ‘SysAdmin’
• Ghi chú: Khi mới cài đặt, SQL Server định nghĩa sẵn login sa
sa và các login là administrator của Windows đều là thành viên
của SysAdmin
Trang 2121
Thêm thành viên vào role (tt)
• Thêm một thành viên vào một vai trò (định nghĩa sẵn
Trang 22Các user và role đặc biệt trong database
• Trong mỗi database có các user/role đặc biệt:
– dbo: là user định sẵn, ứng với login là thành viên của
vai trò quản trị hệ thống SysAdmin Login này có quyền
truy cập và thực hiện mọi thao tác trong tất cả các
database
– public: là role định sẵn trong mỗi database, tất cả các
quyền gán cho “public” đều được tất cả user trong
database thừa hưởng
– guest: là user ứng với những login không được cấp
quyền truy cập vào database 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
Trang 2323
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 hiện lệnh (create database, create
procedure, create table,…)
– Cấp quyền thao tác trên các đối tượng trong CSDL (đọc/ ghi trên table/view, thực hiện thủ tục,…)
Trang 24– statement = create database | create table | create view |
create rule | create procedure | backup database | …
– security account = user | role
• Ví dụ:
GRANT create table, create procedure TO dev01
Trang 26Cấp quyền thao tác trên đối tượng (tt)
– Permission = select|insert|delete|update
– WITH GRANT OPTION: cho phép user được cấp các
quyền thao tác này cho user/ role khác
– AS role: lệnh cấp quyền được thực hiện với tư cách là
thành viên của “role”
Trang 2727
Cấp quyền thao tác trên đối tượng (tt)
• Ví dụ 1:
Grant select, update
on SinhVien (HoTen, DiaChi, NgaySinh)
to Developer
Thành viên của Developer có quyền select, update trên các cột HoTen, DiaChi
và NgaySinh của bảng SinhVien
Nhưng không được cấp
quyền này cho user khác
Trang 28Cấp quyền thao tác trên đối tượng (tt)
• Ví dụ 2:
Grant select, update
Thành viên của Developer có quyền select, update trên các cột HoTen, DiaChi
và NgaySinh của bảng SinhVien
Và được phép cấp quyền này cho user khác
dưới danh nghĩa của Developer
Trang 30Từ chối quyền của user/ role
• Dùng Deny để từ chối quyền của một user/role
– Khi một user/role bị từ chối một quyền, nó sẽ không
được thừa hưởng quyền này dù là thành viên của một role có quyền đó
– Cú pháp: Có hai dạng tương tự như Grant:
Từ chối quyền thực hiện lệnh
Từ chối quyền thao tác trên đối tượng
Trang 32Từ chối quyền thao tác trên đối tượng
• Cú pháp
DENY
{ ALL | permission [, n] }
{ [ ( column [, n] ) ] ON { table | view }
| ON { table | view } [ ( column [, n] ) ]
Trang 3333
Từ chối quyền thao tác trên đối tượng (tt)
• Ghi chú:
– Nếu security_account được cấp (grant) trực tiếp quyền
này với “with grant option”, phải chỉ định cascade khi
deny (từ chối quyền này đối với tất cả user/role đã được security_account cấp quyền này)
• Ví dụ
Deny select, update
on SinhVien (HoTen, DiaChi, NgaySinh)
to Dev02
Trang 34Khôi phục quyền đã cấp/ đã từ chối
• Dùng revoke để khôi phục quyền đã cấp hoặc bỏ đi
việc từ chối quyền trên user/role
– Nếu user/ role được cấp (grant) một quyền, revoke
quyền này sẽ làm mất hiệu lực của lệnh grant trước đó – Nếu user/ role đang bị từ chối (deny) một quyền, lệnh
revoke quyền này trên user/ role cũng gỡ bỏ đi hiệu lực của lệnh deny đó
• Có hai dạng tương tự như grant
– Quyền thực hiện lệnh
– Quyền thực hiện thao tác trên đối tượng
Trang 36Lấy lại/ bỏ từ chối quyền thao tác trên đối tượng
• Cú pháp
REVOKE{ ALL | permission [, n] }
{ [ ( column [, n] ) ] ON { table | view }
| ON { table | view } [ ( column [, n] ) ]
Trang 3737
Lấy lại/ bỏ từ chối quyền thao tác trên đối tượng
• Ví dụ:
Revoke select, update
on SinhVien (HoTen, DiaChi, NgaySinh)
from Dev02
Revoke update
on SinhVien (HoTen, DiaChi, NgaySinh)
from Developer
Trang 38• Xem các lệnh/thao tác hiện tại được cấp
– select * from sys.database_permissions
– select * from sys.database_principals
Trang 39HẾT
39