BẢO MẬT• Mục đích chính: bảo vệ dữ liệu• Bảo mật: các công cụ điều khiển việc truy cập dữ liệu• Rủi ro có thể xảy ra: someone gain unauthorizedaccessMICROSOFT SQL SERVERFACULTY OF INFORMATION TECHNOLOGYBẢO MẬT TRONG SQL SERVER• Bảo mật trong SQL Server gồm 3 lớp:• Login security: kiểm soát ai có thể log vào SQL Server• Database access security: kiểm soát ai có thể truy cậpvào một DB cụ thể trên server• Permission security: kiểm soát một user có thể thực hiệnthao tác gì trên DBMICROSOFT SQL SERVERFACULTY OF INFORMATION TECHNOLOGYBẢO MẬT T
Trang 1BẢO MẬT & PHÂN QUYỀN
GV: Nguyễn Thị Cẩm Hương
Trang 2TẦM QUAN TRỌNG CỦA
BẢO MẬT
• Mục đích chính: bảo vệ dữ liệu
• Bảo mật: các công cụ điều khiển việc truy cập dữ liệu
• Rủi ro có thể xảy ra: someone gain unauthorized
access
Trang 3BẢO MẬT TRONG SQL SERVER
• Bảo mật trong SQL Server gồm 3 lớp:
• Login security: kiểm soát ai có thể log vào SQL Server
• Database access security: kiểm soát ai có thể truy cập vào một DB cụ thể trên server
• Permission security: kiểm soát một user có thể thực hiện thao tác gì trên DB
Trang 4BẢO MẬT TRONG CSDL
Trang 5LOGIN SECURITY
• Có 2 loại chứng thực:
• Windows Authentication
• Users chỉ cần được cấp account trong Windows server
• SQL Server dựa vào Windows để chứng thực cho user
• Cách kết nối này gọi là kết nối tin tưởng, dựa vào ủy nhiệm bảo mật của windows
Trang 6LOGIN SECURITY-CHẾ ĐỘ CHỨNG THỰC
• Mixed Security Mode
• Windows authentication mode
• Thay đổi chế độ chứng thực:
• Launch SQL Server Management Studio
1 Ơ Object Explorer chọn server
2 Right-click trên server, chọn Properties
3 Dưới ‘‘Select a page’’, chọn Security
4 Mục ‘‘Server authentication,’’ chọn
authentication thích hợp
Trang 7• Windows logins:
• Thích hợp với tài khoản user hay group lưu trữ trong Aactive Directory hay local Security Accounts Manager (SAM) database.
• SQL logins:
• Dùng cho các đối tượng không có tài khoản windows
• Dựa vào thông tin lưu trữ và quản lý tài khoản của SQL Server
Trang 8TẠO LOGINS trong Management studio
1 Ở Object Explorer, chọn server
2 Mở thư mục Security
3 R_Click Logins và chọn ‘‘New Login.’’
4 Tại hộp thoại Login–New , nhập tên login muốn tạo
hoặc click Search button chọn account Windows
5 Nếu tạo SQL Login, chọn ‘‘SQL Server authentication’’
6 Khi chọn ‘‘SQL Server authentication,’’ ta có thể chọn
không kiểm tra password policies
7 Chọn CSDL và ngôn ngữ mặc định
Trang 10Sử dụng CREATE LOGIN
• Tạo mới login cho user có tên TINTIN trên MYPC server:
CREATE LOGIN [MYPC\TIN] from Windows;
• Tạo mới login cho Windows group
CREATE LOGIN [MYPC\Family] from Windows;
• Tạo mới login cho SQL SERVER LOGIN cho user MISA:
CREATE LOGIN MISA WITH PASSWORD=‘Misa12@34p@ass’;
Trang 11LƯU Ý KHI TẠO SQL SERVER LOGIN
• Không để trống trường Password hoặc sử dụng các giá
trị “Password”, “Admin”, “Administrator”, “sa”, hay
Trang 12QUYỀN (PERMISSION)
• Các quyền chuẩn của các đối tượng SQL Server
Trang 13VAI TRÒ (ROLES)
• Vai trò: tập các quyền
• Dùng để gán cho một người dùng hoặc nhóm người dùng
• Các vai trò mặc định của SQL Server
• Vai trò Server mặc định (Fixed Server Role)
• Vai trò CSDL mặc định (Fixed Database Role)
• Có quyền định nghĩa thêm các vai trò mới
• Mỗi vai trò được gán một tập quyền VD:
• Vai trò dbcreator có thể thực thi các câu lệnh:
CREATE/ALTER/DROP DATABASE/RESTORE DATABASE
Trang 14VAI TRÒ SERVER (SERVER ROLES)
• Vai trò Server mặc định bao gồm những người
dùng quản trị Server
sysadmin Có thể thực hiện mọi thao tác trên server Theo mặc định,
tất cả thành viên trong nhóm Windows BUILTIN\Administrators đều là thành viên của vai trò này.
securityadmin Có thể quản lý ID và mật khẩu đăng nhập cho server, đồng
thời có thể cấp, từ chối và thu hồi quyền trên cơ sở dữ liệu dbcreator Có thể tạo, thay đổi, xóa và khôi phục cơ sở dữ liệu.
Trang 15VAI TRÒ CSDL (Database ROLES)
Db_owner Có tất cả các quyền đối với CSDL
Db_accessadmin Có quyền thêm hoặc xóa một LoginID của CSDL
Db_securityadmin Có thê quản trị quyền đối tượng, quyền CSDL, Vai trò, các
thành viên của Vai trò Db_datawriter Có thể thêm, xóa, cập nhật dữ liệu trên toàn bộ các bảng
trong CSDL Db_datareader Có thể truy xuất dữ liệu từ tất cả các bảng trong CSDL
Db_denydatawriter Không thể thêm, xóa, cập nhật dữ liệu trên toàn bộ các
bảng trong CSDL Db_denydatareader Không thể truy xuất dữ liệu từ tất cả các bảng trong CSDL Db_backupoperator Có thể thực hiện sao lưu CSDL và chạy các kiểm tra tính
nhất quán trên CSDL
Trang 16TẠO MỘT LOGIN VỚI
Fixed server role
• sp_addsrvrolemember [ @loginame= ] ‘login’ , [
@rolename = ] ‘role’
create
USE master CREATE LOGIN Ted WITH PASSWORD = ‘P@ssw0rd’;
GO EXEC sp_addsrvrolemember ‘Ted’, ‘securityadmin’;
GO
drop
USE master EXEC sp_dropsrvrolemember ‘Ted’, ‘securityadmin’;
GO
Trang 17Database Users
- Tạo mới DB Users trong Management Studio
1 Ở Object Explorer, mở Databases
2 Chọn CSDL (vd: Adventuresworks)
3 Mở Security
4 R_Click Users và chọn ‘‘New User.’’
5 Nhập tên user vào User Name box VD: Carol
6 Nhập tên user (Carol) trong ‘‘Login name’’ box, hoặc
chọn tên login bằng cách click ‘‘ ’’ button
7 Nhập tên nhánh CSDL( Sales) trong ‘‘Default
schema’’ box
8 Click OK
Trang 18Tạo mới DB Users bằng T-SQL
CREATE USER name [{{FOR | FROM} source | WITHOUT
Trang 19Ví dụ
USE master;
CREATE LOGIN [AughtEight\Bob] FROM WINDOWS;
USE AdventureWorks2008;
CREATE USER BillyBob FOR LOGIN [AughtEight\Bob]
WITH DEFAULT_SCHEMA = sales;
Trang 20VỚI DABASE USER TRONG SQL
SERVER 2008
Trang 24DATA CONTROL LANGUAGE - GRANT
• GRANT : gán quyền trên câu lệnh
GRANT { ALL | statement [ , n ] }
[ ( column [ , n ] ) ] ON { table | view }
| ON { table | view } [ ( column [ , n ] ) ]
Trang 25DATA CONTROL LANGUAGE – DENY-REVOKE
• Cú pháp:
DENY <permissions>[ON <object>] TO <user/role>
• Ví dụ:
Use pubs DENY select, insert, update ON titles TO faculty
• Lệnh REVOKE dùng để thu hồi lại quyền đã đuợc cấp hay từ
chối từ 1 user của CSDL hiện hành
Trang 26In Active Directory:
• Tạo Windows user cho mỗi cá nhân.
• Tạo Windows groups đại diện cho nhóm công việc hay phòng ban
• Add các Windows users vào Windows groups.
In SQL Server:
• Tạo login cho Windows groups Nếu dùng SQL Server authentication,
bỏ qua bước Active Directory trên và tạo SQL Server authentication logins ở đây)
• Tạo database user cho login.
• Tạo một hoặc nhiều user-defined database roles, mỗi user đại diện cho một chức năng VD: NV_Kiemtoan, NV_Nhansu
• Thêm database users vào một hay nhiều user-defined database
roles.
Trang 27Overview of Database Objects
• Clustered
• Non-clustered
Views
• Logical result sets
• Based on SELECT queries
Programmability
• Stored Procedures
Trang 29Chỉ mục (Indexing)
• Cơ bản về chỉ mục
• Các loại chỉ mục
• So sánh tính năng các loại chỉ mục
• Tối ưu hóa sử dụng chỉ mục
• Các kỹ thuật sử dụng Index nâng cao
• Bảo trì Index
Trang 30• Có cấu trúc dữ liệu dạng B-TREE (khoảng cách từ
gốc đến mọi nút lá tương đương nhau)
Trang 32Tại sao cần Index?
• Nâng cao hiệu năng thực hiện câu lệnh
• Giảm khóa trên table
• Thực thi ràng buộc Unique constraint
• 2 loại Index thông dụng: Clustered index và
nonclustered index
Trang 33Clustered index
• Sắp xếp bảng theo thứ tự của khóa Index
• Toàn bộ bảng trở thành cây Index
• Các nút lá chứa khóa index đồng thời chứa các
trường còn lại
• Chỉ có thể tối đa một clustered index cho mỗi bảng
• Clustered index có thể chứa một hoặc nhiều trường
• Khi tạo Primary Key, một cách mặc định clustered
index được tạo kèm với nó
• Đây là cách thông thường để tạo clustered index
Trang 34Ví dụ- Clustered index
Trang 35Nonclustered index
• Mỗi node lá chứa khóa index và con trỏ trỏ đến trang
dữ liệu chứa bản ghi tương ứng
• Nếu bảng có clustered index, con trỏ này chính là khóa clustered index
• Nếu bảng không có clustered index, con trỏ này là RowID, một dạng định danh bản ghi kết hợpcủa
fileID+ pageID+ offset
• Bảng có thể có nhiều nonclustered index
• Index có thể chứa một hoặc nhiều trường
• Được lưu trữ tách rời khỏi bảng
Trang 36Nonclustered index
Trang 37Clustered Index và NonClustered index
• Clustered index:
• Tránh bookmark lookup
• Nâng cao độ ổn định cho nonclusteredindex
• Chỉ được phép tạo một clustered index
• Non-clustered index:
• bookmark lookup giảm hiệu năng
• Cho phép tạo nhiều index trên bảng
• Lưu trữ độc lập với bảng tăng khả năng xử lý
song song
Trang 38TẠO INDEXED
CREATE [UNIQUE] [CLUSTERED|NONCLUSTERED]
INDEX <index name> ON <table or view name>(<column name>
[[,] DATA_COMPRESSION = { NONE | ROW | PAGE}]
Trang 40VÔ HIỆU HÓA INDEXED
ALTER INDEX { index_name | ALL }
Trang 41VÍ DỤ CLUSTERED INDEXED
Trang 42VÍ DỤ NON-CLUSTERED INDEX
Trang 43INDEXED BỊ XÁO TRỘN KHI CẬP NHẬT
Trang 44UPDATE SanPham
SET Mota= ‘All the breakthrough technology in iPhone4 is…’WHERE Ten = ‘Iphone4’
Trang 45UNIQUE VÀ NON-UNIQUE INDEX
• unique (duynhất) và non-unique (không duy nhất) là các
thuộc tính của index
• Mỗi index đều có thể unique hoặc non-unique
• Tuynhiên, clustered index thường là unique
• Khi clustered index không unique, mỗi node được gắn thêm
một chuỗi 4 byte (thực chất là một số INT dương) để trở thành unique.
• Khi đó số bản ghi tối đa cho bảng ~ 2 tỷ
• Khi khai báo ràng buộc unique constraint, một unique
index được tạo để thực thi ràng buộc này
Trang 46INDEX SEEK VÀINDEX SCAN
• Index seek:khi hệ thống có thể nhảy thẳng đến
node cần tìm
• Đây là thao tác tối ưu
• Index scan:khi hệ thống cần quét cả cây index
để lấy ra các node cần tìm
• Không tối ưu bằng index seek, nhưng tốt hơn table scan
Trang 47CHỌN CỘT ĐÁNH INDEX
• Cột là ứng cử viên tốt cho index khi:
• Được sử dụng thường xuyên trong điều kiện tìm kiếm (mệnh đề WHERE)
• Được sử dụng trong điều kiện JOIN hai bảng
• Độ lựa chọn (selectivity) đủ cao
• Ưu tiên clustered index cho cột:
• Tăng tuần tự
• Kích thước không quá lớn
• Được tìm kiếm với tần suất cao
• Thường được tìm kiếm theo dải giá trị
Trang 48ĐỘ LỰA CHỌN(SELECTIVITY)
• Độ lựa chọn= Số giá trị khác biệt/ Số bảnghi
• Độ lựa chọn (selectivity) đủ cao
• Với nonclusteredindex,khi selectivity quá thấp bộ Optimizer
bỏ qua index do chi phí lớn
• Tránh chuyển đổi kiểu dữ liệu(type conversion)
• Tránh áp dụng hàm lên cột index
• Cột đầu tiên trong khóa index phải được sử dụng cho
tìm kiếm (với composite index)
• Index với Join: Index giúp giảm không gian tìm kiếm
chọn thuật toán hiệu quả hơn
Trang 49CÁC KỸTHUẬT INDEX NÂNG CAO
• Covering index
• Lưu thêm các cột dữ liệu vào node index
• Giúp tránh truy nhập vào bảng để lấy dữ liệu
• Filtered index
• Index cho một số bản ghi nhất định
• Index intersection
• Nhiều index cùng tham gia lọc dữ liệu
• Di chuyển index sang filegroup khác với bảng
• Đọc index và đọc bảng diễn ra song song
Trang 50BẢO TRÌ INDEX
• Các thao tác cập nhật (INSERT/UPDATE/DELETE)
làm index bị phân mảnh
• Hai dạng phân mảnh:
• Hai node kế tiếp không được lưu trữ liền kề nhau
• Trang(page) chứa nhiều không gian trống
• Phân mảnh làm tăng số trang cần đọc cho cùng
lượng dữ liệu giảm hiệu năng truy vấn
• Thông tin về phân mảnh:
sys.dm_db_index_physical_stats
Trang 51• Rebuild vàReorganize index:
• Dùng để cấu trúc lại index, do đó giảm thiểu được phân mảnh
• Re-org thao tác nhanh hơn nhưng không hiệu quả khi index bị phân mảnh nặng
• Khi độ phân mảnh<=30% REORGANIZE
• Khi độ phân mảnh> 30% REBUILD
• Cập nhật Statistics:
• Statistics chứa thông tin về phân bố dữ liệu của cột giúp
Optimizer chọn phương án thực thi thích hợp
• Sau quá trình cập nhật dữ liệu, statistics bị outdated dẫn đến Optimizer chọn phương án sai
• Thống kê về sử dụng index:
sys.dm_db_index_usage_stats
Trang 52TỔNG KẾT
• Index là công cụ quan trọng trợ giúp các truy vấn vào
database
• Phần lớn sự cố về performance liên quan đến index
• Mặt trái của index :
• Chiếm không gian đĩa
• Tăng chi phí của các thao tác cập nhật dữ liệu