Bài Giảng sql server2

42 229 0
Bài Giảng sql server2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

CHƯƠNG I THỦ TỤC LƯU TRỮ 1.1 Thủ tục lưu trữ (stored procedure) 1.1.1 Các khái niệm Như đề cập chương SQL Server 1, SQL thiết kế cài đặt ngôn ngữ để thực thao tác sở liệu tạo lập cấu trúc sở liệu, bổ sung, cập nhật, xoá truy vấn liệu sở liệu Các câu lệnh SQL người sử dụng viết yêu cầu hệ quản trị sở liệu thực theo chế độ tương tác Các câu lệnh SQL nhúng vào ngơn ngữ lập trình, thơng qua chuỗi thao tác sở liệu xác định thực thi nhờ vào câu lệnh, cấu trúc điều khiển thân ngôn ngữ lập trình sử dụng Với thủ tục lưu trữ, phần khả ngơn ngữ lập trình đưa vào ngơn ngữ SQL Một thủ tục đối tượng sở liệu bao gồm tập nhiều câu lệnh SQL nhóm lại với thành nhóm với khả sau: • Các cấu trúc điều khiển (IF, WHILE, FOR) sử dụng thủ tục • Bên thủ tục lưu trữ sử dụng biến ngơn ngữ lập trình nhằm lưu giữ giá trị tính tốn được, giá trị truy xuất từ sở liệu • Một tập câu lệnh SQL kết hợp lại với thành khối lệnh bên thủ tục Một thủ tục nhận tham số truyền vào trả giá trị thông qua tham số (như ngôn ngữ lập trình) Khi thủ tục lưu trữ định nghĩa, gọi thơng qua tên thủ tục, nhận tham số truyền vào, thực thi câu lệnh SQL bên thủ tục trả giá trị sau thực xong Sử dụng thủ tục lưu trữ sở liệu giúp tăng hiệu sở liệu, mang lại lợi ích sau: • Đơn giản hoá thao tác sở liệu nhờ vào khả module hoá thao tác • Thủ tục lưu trữ phân tích, tối ưu tạo nên việc thực thi chúng nhanh nhiều so với việc phải thực tập rời rạc câu lệnh SQL tương đương theo cách thơng thường • Thủ tục lưu trữ cho phép thực yêu cầu câu lệnh đơn giản thay phải sử dụng nhiều dòng lệnh SQL Điều làm giảm thiểu lưu thơng mạng • Thay cấp phát quyền trực tiếp cho người sử dụng câu lệnh SQL đối tượng sở liệu, ta cấp phát quyền cho người sử dụng thơng qua thủ tục lưu trữ, nhờ tăng khả bảo mật hệ thống 1.1.2 Tạo thủ tục lưu trữ Thủ tục lưu trữ tạo câu lệnh CREATE PROCEDURE với cú pháp sau: CREATE PROCEDURE tên_thủ_tục [(danh_sách_tham_số)] [WITH RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION] AS Các_câu_lệnh_của_thủ_tục Trong đó: tên_thủ_tục Tên thủ tục cần tạo Tên phải tuân theo qui tắc định danh không vượt 128 ký tự Các tham số thủ tục khai báo sau tên thủ tục thủ tục có nhiều tham số khai báo phân cách danh_sách_tham_số dấu phẩy Khai báo tham số tối thiểu phải bao gồm hai phần: • Tên tham số bắt đầu dấu @ • Kiểu liệu tham số Ví dụ: @mamonhoc nvarchar(10) Thơng thường, thủ tục phân tích, tối ưu dịch sẵn RECOMPILE ENCRYPTION lần gọi Nếu tuỳ chọn WITH RECOMPILE định, thủ tục dịch lại gọi Thủ tục mã hoá tuỳ chọn WITH ENCRYPTION định Nếu thủ tục mã hố, ta khơng thể xem nội dung thủ tục Tập hợp câu lệnh sử dụng nội dung thủ tục Các các_câu_lệnh_của_thủ_tục câu lệnh đặt cặp từ khố BEGIN END khơng Ví dụ 1.1: Giả sử ta cần thực chuỗi thao tác sau sở liệu Bổ sung thêm môn học sở liệu có mã TI-005 số đơn vị học trình vào bảng MONHOC Lên danh sách nhập điểm thi môn sở liệu cho sinh viên học lớp có mã C24102 (tức bổ sung thêm vào bảng DIEMTHI ghi với cột MAMONHOC nhận giá trị TI-005, cột MASV nhận giá trị mã sinh viên học lớp có mã C24105 cột điểm NULL) Nếu thực yêu cầu thông qua câu lệnh SQL thông thường, ta phải thực thi hai câu lệnh sau: INSERT INTO MONHOC VALUES('TI-005','Cơ sở liệu',5) INSERT INTO DIEMTHI(MAMONHOC,MASV) SELECT ‘TI-005’,MASV FROM SINHVIEN WHERE MALOP='C24102' Thay phải sử dụng hai câu lệnh trên, ta định nghĩa mơt thủ tục lưu trữ với tham số vào @mamonhoc, @tenmonhoc, @sodvht @malop sau: CREATE PROC sp_LenDanhSachDiem( @mamonhoc NVARCHAR(10), @tenmonhoc NVARCHAR(50), @sodvht SMALLINT, @malop NVARCHAR(10)) AS BEGIN INSERT INTO monhoc VALUES(@mamonhoc,@tenmonhoc,@sodvht) INSERT INTO diemthi(mamonhoc,masv) SELECT @mamonhoc,masv FROM sinhvien WHERE malop=@malop END Khi thủ tục tạo ra, ta thực hai yêu cầu đặt cách đơn giản thơng qua lòi gọi thủ tục: sp_LenDanhSachDiem 'TI-005','Cơ sở liệu',5,'C24102' 1.1.3 Lời gọi thủ tục lưu trữ Như thấy ví dụ trên, thủ tục lưu trữ tạo ra, ta yêu cầu hệ quản trị sở liệu thực thi thủ tục lời gọi thủ tục có dạng: tên_thủ_tục [danh_sách_các_đối_số] Số lượng đối số thứ tự chúng phải phù hợp với số lượng thứ tự tham số định nghĩa thủ tục Trong trường hợp lời gọi thủ tục thực bên thủ tục khác, bên trigger hay kết hợp với câu lệnh SQL khác, ta sử dụng cú pháp sau: EXECUTE tên_thủ_tục [danh_sách_các_đối_số] Thứ tự đối số truyền cho thủ tục khơng cần phải tuân theo thứ tự tham số định nghĩa thủ tục tất đối số viết dạng: @tên_tham_số = giá_trị Ví dụ 1.2: Lời gọi thủ tục ví dụ viết sau: sp_LenDanhSachDiem @malop='C24102', @tenmonhoc='Cơ sở liệu', @mamonhoc='TI-005', @sodvht=5 1.1.4 Sử dụng biến thủ tục Ngoài tham số truyền cho thủ tục, bên thủ tục sử dụng biến nhằm lưu giữ giá trị tính tốn truy xuất từ sở liệu Các biến thủ tục khai báo từ khoá DECLARE theo cú pháp sau: DECLARE @tên_biến kiểu_dữ_liệu Tên biến phải bắt đầu ký tự @ tuân theo qui tắc định danh Ví dụ minh hoạ việc sử dụng biến thủ tục Ví dụ 1.3: Trong định nghĩa thủ tục sử dung biến chứa giá trị truy xuất từ sở liệu CREATE PROCEDURE sp_Vidu( @malop1 NVARCHAR(10), @malop2 NVARCHAR(10)) AS DECLARE @tenlop1 NVARCHAR(30) DECLARE @namnhaphoc1 INT DECLARE @tenlop2 NVARCHAR(30) DECLARE @namnhaphoc2 INT SELECT @tenlop1=tenlop, @namnhaphoc1=namnhaphoc FROM lop WHERE malop=@malop1 SELECT @tenlop2=tenlop, @namnhaphoc2=namnhaphoc FROM lop WHERE malop=@malop2 PRINT @tenlop1+' nhap hoc nam '+str(@namnhaphoc1) print @tenlop2+' nhap hoc nam '+str(@namnhaphoc2) IF @namnhaphoc1=@namnhaphoc2 PRINT 'Hai lớp nhập học năm' ELSE PRINT 'Hai lớp nhập học khác năm' 1.1.5 Giá trị trả tham số thủ tục lưu trữ Trong ví dụ trước, đối số truyền cho thủ tục có lời gọi đến thủ tục biến, thay đổi giá trị biền thủ tục không giữ lại kết thúc trình thực thủ tục Ví dụ 1.4: Xét câu lệnh sau CREATE PROCEDURE sp_Conghaiso(@a INT,@b INT, @c INT) AS SELECT @c=@a+@b Nếu sau tạo thủ tục với câu lệnh trên, ta thực thi tập câu lệnh sau: DECLARE @tong INT SELECT @tong=0 EXECUTE sp_Conghaiso 100,200,@tong SELECT @tong Câu lệnh “SELECT @tong” cuối loạt câu lệnh cho kết là: Trong trường hợp cần phải giữ lại giá trị đối số sau kết thúc thủ tục, ta phải khai báo tham số thủ tục theo cú pháp sau: @tên_tham_số kiểu_dữ_liệu OUTPUT hoặc: @tên_tham_số kiểu_dữ_liệu OUT lời gọi thủ tục, sau đối số truyền cho thủ tục, ta phải định thêm từ khố OUTPUT (hoặc OUT) Ví dụ 1.5: Ta định nghĩa lại thủ tục ví dụ 1.4 sau: CREATE PROCEDURE sp_Conghaiso( @a INT, @b INT, @c INT OUTPUT) AS SELECT @c=@a+@b thực lời gọi thủ tục tập câu lệnh sau: DECLARE @tong INT SELECT @tong=0 EXECUTE sp_Conghaiso 100,200,@tong OUTPUT SELECT @tong câu lệnh “SELECT @tong” cho kết là: 300 1.1.6 Tham số với giá trị mặc định Các tham số khai báo thủ tục nhận giá trị mặc định Giá trị mặc định gán cho tham số trường hợp khơng truyền đối số cho tham số có lời gọi đến thủ tục Tham số với giá trị mặc định khai báo theo cú pháp sau: @tên_tham_số kiểu_dữ_liệu = giá_trị_mặc_định Ví dụ 5.6: Trong câu lệnh đây: CREATE PROC sp_TestDefault( @tenlop NVARCHAR(30)=NULL, @noisinh NVARCHAR(100)='Huế') AS BEGIN IF @tenlop IS NULL SELECT hodem,ten FROM sinhvien INNER JOIN lop ON sinhvien.malop=lop.malop WHERE noisinh=@noisinh ELSE SELECT hodem,ten FROM sinhvien INNER JOIN lop ON sinhvien.malop=lop.malop WHERE noisinh=@noisinh AND tenlop=@tenlop END thủ tục sp_TestDefault định nghĩa với tham số @tenlop có giá trị mặc định NULL tham số @noisinh có giá trị mặc định Huế Với thủ tục định nghĩa trên, ta thực lời gọi với mục đích khác sau: • Cho biết họ tên sinh viên sinh Huế: sp_testdefault • Cho biết họ tên sinh viên lớp Tin K24 sinh Huế: sp_testdefault @tenlop='Tin K24' • Cho biết họ tên sinh viên sinh Nghệ An: sp_testDefault @noisinh=N'Nghệ An' • Cho biết họ tên sinh viên lớp Tin K26 sinh Đà Nẵng: sp_testdefault @tenlop='Tin K26',@noisinh='Đà Nẵng' 1.1.7 Sửa đổi thủ tục Khi thủ tục tạo ra, ta tiến hành định nghĩa lại thủ tục câu lệnh ALTER PROCEDURE có cú pháp sau: ALTER PROCEDURE tên_thủ_tục [(danh_sách_tham_số)] [WITH RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION] AS Các_câu_lệnh_Của_thủ_tục Câu lệnh sử dụng tương tự câu lệnh CREATE PROCEDURE Việc sửa đổi lại thủ tục có khơng làm thay đổi đến quyền cấp phát thủ tục không tác động đến thủ tục khác hay trigger phụ thuộc vào thủ tục 1.1.8 Xoá thủ tục Để xố thủ tục có, ta sử dụng câu lệnh DROP PROCEDURE với cú pháp sau: DROP PROCEDURE tên_thủ_tục Khi xoá thủ tục, tất quyền cấp cho người sử dụng thủ tục đồng thời bị xố bỏ Do đó, tạo lại thủ tục, ta phải tiến hành cấp phát lại quyền thủ tục CHƯƠNG II TRIGGER Trong chương 1, ta biết ràng buộc sử dụng để đảm bảo tính tồn vẹn liệu sở liệu Một đối tượng khác thường sử dụng sở liệu với mục đích trigger Cũng tương tự thủ tục lưu trữ, trigger đối tượng chứa tập câu lệnh SQL tập câu lệnh thực thi trigger gọi Điểm khác biệt thủ tục lưu trữ trigger là: thủ tục lưu trữ thực thi người sử dụng có lời gọi đến chúng trigger lại “gọi” tự động xảy giao tác làm thay đổi liệu bảng Mỗi trigger tạo gắn liền với bảng sở liệu Khi liệu bảng bị thay đổi (tức bảng chịu tác động câu lệnh INSERT, UPDATE hay DELETE) trigger tự đơng kích hoạt Sử dụng trigger cách hợp lý sở liệu có tác động lớn việc tăng hiệu sở liệu Các trigger thực hữu dụng với khả sau: • Một trigger nhận biết, ngăn chặn huỷ bỏ thao tác làm thay đổi trái phép liệu sở liệu • Các thao tác liệu (xoá, cập nhật bổ sung) trigger phát tự động thực loạt thao tác khác sở liệu nhằm đảm bảo tính hợp lệ liệu • Thơng qua trigger, ta tạo kiểm tra mối quan hệ phức tạp bảng sở liệu mà thân ràng buộc thực 2.1 Định nghĩa trigger Một trigger đối tượng gắn liền với bảng tự động kích hoạt xảy giao tác làm thay đổi liệu bảng Định nghĩa trigger bao gồm yếu tố sau: • Trigger áp dụng bảng nào? • Trigger kích hoạt câu lệnh thực thi bảng: INSERT, UPDATE, DELETE? • Trigger làm kích hoạt? Câu lệnh CREATE TRIGGER sử dụng để đinh nghĩa trigger có cú pháp sau: CREATE TRIGGER tên_trigger ON tên_bảng FOR {[INSERT][,][UPDATE][,][DELETE]} AS [IF UPDATE(tên_cột) [AND UPDATE(tên_cột)|OR UPDATE(tên_cột)] ] các_câu_lệnh_của_trigger Ví dụ 2.1: Ta định nghĩa bảng sau: Bảng MATHANG lưu trữ liệu mặt hàng: CREATE TABLE mathang ( Mahang NVARCHAR(5) PRIMARY KEY, /*mã hàng*/ Tenhang NVARCHAR(50) NOT NULL, /*tên hàng*/ Soluong INT, /*Số lượng hàng có*/ ) Bảng NHATKYBANHANG lưu trữ thông tin lần bán hàng CREATE TABLE nhatkybanhang ( stt INT IDENTITY PRIMARY KEY, DATETIME, /*ngày bán hàng*/ nguoimua NVARCHAR(30), /*tên người mua hàng*/ mahang NVARCHAR(5) FOREIGN KEY REFERENCES mathang(mahang), Soluong INT, Giaban MONEY ) Câu lệnh định nghĩa trigger trg_nhatkybanhang_insert Trigger có chức tự động giảm số lượng hàng có mặt hàng bán (tức câu lệnh INSERT thực thi bảng NHATKYBANHANG) CREATE TRIGGER trg_nhatkybanhang_insert ON nhatkybanhang FOR INSERT 10 maso INT NOT NULL PRIMARY KEY, ngayduatin DATETIME NULL , tieude NVARCHAR(200) NULL , noidung NTEXT NULL , maphanloai INT NULL FOREIGN KEY REFERENCES loaibantin(maphanloai) ) Trong bảng LOAIBANTIN, giá trị cột BANTINMOINHAT cho biết mã số tin thuộc loại tương ứng (được bổ sung sau cùng) Hãy viết trigger cho bảng BANTIN cho: • Khi tin bổ sung, cập nhật lại cột BANTINMOINHAT dòng tương ứng với loại tin vừa bổ sung • Khi tin bị xoá, cập nhật lại giá trị cột BANTINMOINHAT bảng LOAIBANTIN dòng ứng với loại tin vừa xóa mã số tin trước (dựa vào ngày đưa tin) Nếu khơng tin loại giá trị cột Khi cập nhật lại mã số tin tin cập nhật lại giá trị cột BANTINMOINHAT mã số 28 CHƯƠNG IV BẢO MẬT TRONG SQL 4.1 Các khái niệm Bảo mật yếu tố đóng vai trò quan trọng sống sở liệu Hầu hết hệ quản trị sở liệu thương mại cung cấp khả bảo mật sở liệu với chức như: • Cấp phát quyền truy cập sở liệu cho người dùng nhóm người dùng, phát ngăn chặn thao tác trái phép người sử dụng sở liệu • Cấp phát quyền sử dụng câu lệnh, đối tượng sở liệu người dùng • Thu hồi (huỷ bỏ) quyền người dùng Bảo mật liệu SQL thực dựa ba khái niệm sau đây: Người dùng sở liệu (Database user): Là đối tượng sử dụng sở liệu, thực thi thao tác sở liệu tạo bảng, truy xuất liệu, Mỗi người dùng sở liệu xác định thông qua tên người dùng (User ID) Một tập nhiều người dùng tổ chức nhóm gọi nhóm người dùng (User Group) Chính sách bảo mật sở liệu áp dụng cho người dùng cho nhóm người dùng Các đối tượng sở liệu (Database objects): Tập hợp đối tượng, cấu trúc lưu trữ sử dụng sở liệu bảng, khung nhìn, thủ tục, hàm gọi đối tượng sở liệu Đây đối tượng cần bảo vệ sách bảo mật sở liệu Đặc quyền (Privileges): Là tập thao tác cấp phát cho người dùng đối tượng sở liệu Chằng hạn người dùng truy xuất liệu bảng câu lệnh SELECT khơng thể thực câu lệnh INSERT, UPDATE hay DELETE bảng SQL cung cấp hai câu lệnh cho phép thiết lập sách bảo mật sở liệu: • Lệnh GRANT: Sử dụng để cấp phát quyền cho người sử dụng đối tượng sở liệu quyền sử dụng câu lệnh SQL sở liệu 29 • Lệnh REVOKE: Được sử dụng để thu hồi quyền người sử dụng 4.2 Cấp phát quyền Câu lệnh GRANT sử dụng để cấp phát quyền cho người dùng hay nhóm người dùng đối tượng sở liệu Câu lệnh thường sử dụng trongcác trường hợp sau: • Người sở hữu đối tượng sở liệu muốn cho phép người dùng khác quyền sử dụng đối tượng mà sở hữu • Người sở hữu sở liệu cấp phát quyền thực thi câu lệnh (như CREATE TABLE, CREATE VIEW, ) cho người dùng khác 4.2.1 Cấp phát quyền cho người dùng đối tượng sở liệu Chỉ có người sở hữu sở liệu người sở hữu đối tượng sở liệu cấp phát quyền cho người dùng đối tượng sở liệu Câu lệnh GRANT trường hợp có cú pháp sau: GRANT ALL [PRIVILEGES]| các_quyền_cấp_phát [(danh_sách_cột)] ON tên_bảng | tên_khung_nhìn |ON tên_bảng | tên_khung_nhìn [(danh_sách_cột)] |ON tên_thủ_tục |ON tên_hàm TO danh_sách_người_dùng | nhóm_người_dùng [WITH GRANT OPTION ] Trong đó: ALL [PRIVILEGES] Cấp phát tất quyền cho người dùng đối tượng sở liệu định Các quyền cấp phát cho người dùng bao gồm: • Đối với bảng, khung nhìn, hàm trả liệu kiểu bảng: SELECT, INSERT, DELETE, UPDATE REFERENCES • Đối với cột bảng, khung nhìn: SELECT UPDATE • Đối với thủ tục lưu trữ hàm vô hướng: EXECUTE Trong quyền đề cập đến trên, 30 quyền REFERENCES sử dụng nhằm cho phép tạo khóa ngồi tham chiếu đến bảng cấp phát Danh sách quyền cần cấp phát cho người dùng đối các_quyền_cấp_phát tượng sở liệu định Các quyền phân tên_bảng|tên_khung_nhìn danh_sách_cột tên_thủ_tục tên_hàm cách dấu phẩy Tên bảng khung nhìn cần cấp phát quyền Danh sách cột bảng khung nhìn cần cấp phát quyền Tên thủ tục cấp phát cho người dùng Tên hàm (do người dùng định nghĩa) cấp phát quyền Danh sách tên người dùng nhận quyền cấp phát danh_sách_người_dùng Tên người dùng phân cách dấu phẩy WITH GRANT OPTION Cho phép người dùng chuyển tiếp quyền cho người dùng khác Các ví dụ minh hoạ cho ta cách sử dụng câu lệnh GRANT để cấp phát quyền cho người dùng đối tượng sở liệu Ví dụ 4.1: Cấp phát cho người dùng có tên thuchanh quyền thực thi câu lệnh SELECT, INSERT UPDATE bảng LOP GRANT SELECT,INSERT,UPDATE ON lop TO thuchanh Cho phép người dùng thuchanh quyền xem họ tên ngày sinh sinh viên (cột HODEM,TEN NGAYSINH bảng SINHVIEN) GRANT SELECT (hodem,ten,ngaysinh) ON sinhvien TO thuchanh hoặc: GRANT SELECT ON sinhvien(hodem,ten,ngaysinh) TO thuchanh Với quyền cấp phát trên, người dùng thuchanh thực câu lệnh sau bảng SINHVIEN SELECT hoden,ten,ngaysinh FROM sinhvien 31 Nhưng câu lệnh lại thực SELECT * FROM sinhvien Trong trường hợp cần cấp phát tất quyền thực đối tượng sở liệu cho người dùng, thay liệt kê câu lệnh, ta cần sử dụng từ khoá ALL PRIVILEGES (từ khóa PRIVILEGES khơng cần định) Câu lệnh cấp phát cho người dùng thuchanh quyền SELECT, INSERT, UPDATE, DELETE VÀ REFERENCES bảng DIEMTHI GRANT ALL ON DIEMTHI TO thuchanh Khi ta cấp phát quyền cho người dùng đối tượng sở liệu, người dùng thực thi câu lệnh cho phép đối tượng cấp phát Tuy nhiên, người dùng khơng có quyền cấp phát quyền mà phép cho người sử dụng khác.Trong số trường hợp, ta cấp phát quyền cho người dùng đó, ta cho phép người chuyển tiếp quyền cho người dùng khác cách định tuỳ chọn WITH GRANT OPTION câu lệnh GRANT Ví dụ 4.2: Cho phép người dùng thuchanh quyền xem liệu bảng SINHVIEN đồng thời chuyển tiếp quyền cho người dùng khác GRANT SELECT ON sinhvien TO thuchanh WITH GRANT OPTION 4.2.2 Cấp phát quyền thực thi câu lệnh Ngoài chức cấp phát quyền cho người sử dụng đối tượng sở liệu, câu lệnh GRANT sử dụng để cấp phát cho người sử dụng số quyền hệ quản trị sở liệu sở liệu Những quyền cấp phát trường hợp bao gồm: • Tạo sở liệu: CREATE DATEBASE • Tạo bảng: CREATE RULE • Tạo khung nhìn: CREATE VIEW • Tạo thủ tục lưu trữ: CREATE PROCEDURE 32 • Tạo hàm: CREATE FUNCTION • Sao lưu sở liệu: BACKUP DATABASE Câu lệnh GRANT sử dụng trường hợp có cú pháp sau: GRANT ALL | TO danh_sách_câu_lênh danh_sách_người_dùng Ví dụ 4.3: Để cấp phát quyền tạo bảng khung nhìn cho người dùng có tên thuchanh, ta sử dụng câu lệnh sau: GRANT CREATE TABLE,CREATE VIEW TO thuchanh Với câu lệnh GRANT, ta cho phép người sử dụng tạo đối tượng sở liệu sở liệu Đối tượng sở liệu người dùng tạo người sở hữu người có quyền cho người dùng khác sử dụng đối tượng xóa bỏ (DROP) đối tượng tạo Khác với trường hợp sử dụng câu lệnh GRANT để cấp phát quyền đối tượng sở liệu, câu lệnh GRANT trường hợp sử dụng tuỳ chọn WITH GRANT OPTION, tức người dùng chuyển tiếp quyền thực thi câu lệnh cấp phát 4.3 Thu hồi quyền Câu lệnh REVOKE sử dụng để thu hồi quyền cấp phát cho người dùng Tương ứng với câu lệnh GRANT, câu lệnh REVOKE sử dụng hai trường hợp: • Thu hồi quyền cấp phát cho người dùng đối tượng sở liệu • Thu hồi quyền thực thi câu lệnh sở liệu cấp phát cho người dùng 4.3.1 Thu hồi quyền đối tượng sở liệu: Cú pháp câu lệnh REVOKE sử dụng để thu hồi quyền cấp phát đối tượng sở liệu có cú pháp sau: REVOKE [GRANT OPTION FOR] ALL [PRIVILEGES]| các_quyền_cần_thu_hồi [(danh_sách_cột)] ON |ON tên_bảng | tên_bảng | tên_khung_nhìn tên_khung_nhìn [(danh_sách_cột)] |ON tên_thủ_tục |ON tên_hàm 33 FROM danh_sách_người_dùng [CASCADE] Câu lệnh REVOKE sử dụng để thu hồi số quyền cấp phát cho người dùng thu hồi tất quyền (ALL PRIVILEGES) Ví dụ 4.4: Thu hồi quyền thực thi lệnh INSERT bảng LOP người dùng thuchanh REVOKE INSERT ON lop FROM thuchanh Giả sử người dùng thuchanh cấp phát quyền xem liệu cột HODEM, TEN NGAYSINH bảng SINHVIEN, câu lệnh thu hồi quyền cấp phát cột NGAYSINH (chỉ cho phép xem liệu cột HODEM TEN) REVOKE SELECT ON sinhvien(ngaysinh) FROM thuchanh Khi ta sử dụng câu lệnh REVOKE để thu hồi quyền đối tượng sở liêu từ người dùng náo đó, quyền mà ta cấp phát trước thu hồi, quyền mà người dùng cho phép người dùng khác có hiệu lực Nói cách khác, hai người dùng khác cấp phát quyền đối tượng sở liệu cho người dùng khác, sau người thu thu hồi lại quyền cấp phát quyền mà người dùng thứ hai cấp phát có hiệu lực Ví dụ 4.5: Giả sử sở liệu ta có người dùng A, B C A B có quyền sử dụng cấp phát quyền bảng R A thực lệnh sau để cấp phát quyền xem liệu bảng R cho C: GRANT SELECT ON R TO C B cấp phát quyền xem bổ sung liệu bảng R cho C câu lệnh: GRANT SELECT, INSERT ON R TO C Như vậy, C có quyền xem bổ sung liệu bảng R Bây giờ, B thực lệnh: REVOKE SELECT, INSERT 34 ON R FROM C Người dùng C không quyền bổ sung liệu bảng R xem liệu bảng (quyền A cấp cho C hiệu lực) Nếu ta cấp phát quyền cho người dùng câu lệnh GRANT với tuỳ chọn WITH GRANT OPTION thu hồi quyền câu lệnh REVOKE phải định tuỳ chọn CASCADE Trong trường hợp này, quyền chuyển tiếp cho người dùng khác đồng thời thu hồi Ví dụ 4.6: Ta cấp phát cho người dùng A bảng R với câu lệnh GRANT sau: GRANT SELECT ON R TO A WITH GRANT OPTION sau người dùng A lại cấp phát cho người dùng B quyền xem liệu R với câu lệnh: GRANT SELECT ON R TO B Nếu muốn thu hồi quyền cấp phát cho người dùng A, ta sử dụng câu lệnh REVOKE sau: REVOKE SELECT ON NHANVIEN FROM A CASCADE Câu lệnh đồng thời thu hồi quyền mà A cấp cho B A B xem liệu bảng R Trong trường hợp cần thu hồi quyền chuyển tiếp khả chuyển tiếp quyền người cấp phát quyền với tuỳ chọn WITH GRANT OPTION, câu lệnh REVOKE ta định mệnh đề GRANT OPTION FOR Ví dụ 4.7: Trong ví dụ trên, ta thay câu lệnh: REVOKE SELECT ON NHANVIEN FROM A CASCADE câu lệnh: REVOKE GRANT OPTION FOR SELECT ON NHANVIEN 35 FROM A CASCADE Thì B khơng quyền xem liệu bảng R đồng thời A chuyển tiếp quyền mà ta cấp phát cho người dùng khác (tuy nhiên A quyền xem liệu bảng R) 4.3.2 Thu hồi quyền thực thi câu lênh: Việc thu hồi quyền thực thi câu lệnh sở liệu (CREATE DATABASE, CREATE TABLE, CREATE VIEW, ) thực đơn giản với câu lệnh REVOKE có cú pháp: REVOKE ALL | FROM các_câu_lệnh_cần_thu_hồi danh_sách_người_dùng Ví dụ 4.8: Để khơng cho phép người dùng thuchanh thực lệnh CREATE TABLE sở liệu, ta sử dụng câu lệnh: REVOKE CREATE TABLE FROM thuchanh 36 CHƯƠNG V GIAO TÁC SQL 5.1 Giao tác tính chất giao tác Một giao tác (transaction) chuỗi nhiều câu lệnh SQL kết hợp lại với thành khối công việc Các câu lệnh SQL xuất giao tác thường có mối quan hệ tương đối mật thiết với thực thao tác độc lập Việc kết hợp câu lệnh lại với giao tác nhằm đảm bảo tính tồn vẹn liệu khả phục hồi liệu Trong giao tác, câu lệnh độc lập với tất câu lệnh giao tác đòi hỏi phải thực thi trọn vẹn khơng câu lệnh thực thi Các sở liệu sử dụng nhật ký giao tác (transaction log) để ghi lại thay đổi mà giao tác tạo sở liệu thơng qua phục hồi liệu trường hợp gặp lỗi hay hệ thống có cố Một giao tác đòi hỏi phải có bồn tính chất sau đây: • Tính nguyên tử (Atomicity): Mọi thay đổi mặt liệu phải thực trọn vẹn giao tác thực thành cơng khơng có thay đổi liệu xảy giao tác khơng thực trọn vẹn Nói cách khác, tác dụng câu lệnh giao tác phải câu lệnh đơn • Tính qn (Consistency): Tính quan đòi hỏi sau giao tác kết thúc, cho dù thành công hay bị lỗi, tất liệu phải trạng thái quán (tức toàn vẹn liệu phải ln bảo tồn) • Tính độc lập (Isolation): Tính độc lập giao tác có nghĩa tác dụng giao tác phải giống thực hệ thống Nói cách khác, giao tác thực thi đồng thời với giao tác khác hệ thống không chịu ảnh hưởng giao tác • Tính bền vững (Durability): Sau giao tác thực thành công, tác dụng mà tạo phải tồn bền vững sở liệu, cho dù hệ thống có bị lỗi 5.2 Mơ hình giao tác SQL Giao tác SQL định nghĩa dựa câu lệnh xử lý giao tác sau đây: • BEGIN TRANSACTION: Bắt đầu giao tác 37 • SAVE TRANSACTION:Đánh dấu vị trí giao tác (gọi điểm đánh dấu) • ROLLBACK TRANSACTION: Quay lui trở lại đầu giao tác điểm đánh dấu trước giao tác • COMMIT TRANSACTION: Đánh dấu điểm kết thúc giao tác Khi câu lệnh thực thi có nghĩa giao tác thực thành cơng • ROLLBACK [WORK]: Quay lui trở lại đầu giao tác • COMMIT [WORK]: Đánh dấu kết thúc giao tác Một giao tác SQL bắt đấu câu lệnh BEGIN TRANSACTION Câu lệnh đánh dấu điểm bắt đầu giao tác có cú pháp sau: BEGIN TRANSACTION [tên_giao_tác] Một giao tác kết thúc trường hợp sau: Câu lệnh COMMIT TRANSACTION (hoặc COMMIT WORK) thực thi Câu lệnh báo hiệu kết thúc thành công giao tác Sau câu lệnh này, giao tác bắt đầu • Khi câu lệnh ROLLBACK TRANSACTION (hoặc ROLLBACK WORK) thực thi để huỷ bỏ giao tác đưa sở liệu trạng thái trước giao tác bắt đầu Một giao tác bắt đầu sau câu lệnh ROLLBACK thực thi • Một giao tác kết thúc trình thực gặp lỗi (chẳng hạn hệ thống gặp lỗi, kết nối mạng bị “đứt”, ) Trong trường hợp này, hệ thống tự động phục hồi lại trạng thái sở liệu trước giao tác bắt đầu (tương tự câu lệnh ROLLBACK thực thi để huỷ bỏ giao tác) Tuy nhiên, trường hợp khơng có giao tác bắt đầu Ví dụ 5.1: Giao tác kết thúc lệnh ROLLBACK TRANSACTION thay đổi vể mặt liệu mà giao tác thực (UPDATE) khơng có tác dụng BEGIN TRANSACTION giaotac1 UPDATE monhoc SET sodvht=4 WHERE sodvht=3 UPDATE diemthi SET diemlan2=0 WHERE diemlan2 IS NULL ROLLBACK TRANSACTION giaotac1 giao tác kết thúc lệnh COMMIT thực thành công việc cập nhật liệu bảng MONHOC DIEMTHI BEGIN TRANSACTION giaotac2 38 UPDATE monhoc SET sodvht=4 WHERE sodvht=3 UPDATE diemthi SET diemlan2=0 WHERE diemlan2 IS NULL COMMIT TRANSACTION giaotac2 Câu lệnh: SAVE TRANSACTION sử dụng để tên_điểm_dánh_dấu đánh dấu vị trí giao tác Khi câu lệnh thực thi, trạng thái sở liệu thời điểm ghi lại nhật ký giao tác Trong q trình thực thi giao tác quay trở lại điểm đánh dấu cách sử dụng câu lệnh: ROLLBACK TRANSACTION tên_điểm_đánh_dấu Trong trường hợp này, thay đổi mặt liệu mà giao tác thực từ điểm đánh dấu đến trước câu lệnh ROLLBACK triệu gọi bị huỷ bỏ Giao tác tiếp tục với trạng thái sở liệu có điểm đánh dấu Hình 6.2 mơ tả cho ta thấy hoạt động giao tác có sử dụng điểm đánh dấu: Sau câu lệnh ROLLBACK TRANSACTION sử dụng để quay lui lại điểm đánh dấu giao tác, giao tác tiếp tục với câu lệnh sau Nhưng câu lệnh sử dụng để quay lui lại đầu giao tác (tức huỷ bỏ giao tác), giao tác kết thúc câu lệnh COMMIT TRANSACTION trường hợp gặp lỗi Ví dụ 5.2: Câu lệnh COMMIT TRANSACTION giao tác kết thúc thành công giao tác BEGIN TRANSACTION giaotac3 UPDATE diemthi SET diemlan2=0 WHERE diemlan2 IS NULL SAVE TRANSACTION a UPDATE monhoc SET sodvht=4 WHERE sodvht=3 ROLLBACK TRANSACTION a UPDATE monhoc SET sodvht=2 WHERE sodvht=3 COMMIT TRANSACTION giaotac3 ví dụ đây, câu lệnh COMMIT TRANSACTION gặp lỗi: BEGIN TRANSACTION giaotac4 UPDATE diemthi SET diemlan2=0 WHERE diemlan2 IS NULL SAVE TRANSACTION a 39 UPDATE monhoc SET sodvht=4 WHERE sodvht=3 ROLLBACK TRANSACTION giaotac4 UPDATE monhoc SET sodvht=2 WHERE sodvht=3 COMMIT TRANSACTION giaotac4 5.3 Giao tác lồng Các giao tác SQL lồng vào theo cấp Điều thường gặp giao tác thủ tục lưu trữ gọi từ tiến trình giao tác khác Ví dụ minh hoạ cho ta trường hợp giao tác lồng Ví dụ 5.3: Ta định nghĩa bảng T sau: CREATE TABLE T ( A INT PRIMARY KEY, B INT ) thủ tục sp_TransEx: CREATE PROC sp_TranEx(@a INT,@b INT) AS BEGIN BEGIN TRANSACTION T1 IF NOT EXISTS (SELECT * FROM T WHERE A=@A ) INSERT INTO T VALUES(@A,@B) IF NOT EXISTS (SELECT * FROM T WHERE A=@A+1) INSERT INTO T VALUES(@A+1,@B+1) COMMIT TRANSACTION T1 END Lời gọi đến thủ tuch sp_TransEx thực giao tác khác sau: BEGIN TRANSACTION T3 EXECUTE sp_tranex 10,20 ROLLBACK TRANSACTION T3 Trong giao tác trên, câu lệnh ROLLBACK TRANSACTION T3 huỷ bỏ giao tác tác dụng lời gọi thủ tục giao tác khơng tác dụng, tức khơng có 40 dòng liệu bổ sung vào bảng T (cho dù giao tác T1 thủ tục sp_tranex thực thành công với lệnh COMMIT TRANSACTION T1) Ta xét tiếp trường hợp giao tác khác có lời gọi đến thủ tục sp_tranex sau: BEGIN TRANSACTION EXECUTE sp_tranex 20,40 SAVE TRANSACTION a EXECUTE sp_tranex 30,60 ROLLBACK TRANSACTION a EXECUTE sp_tranex 40,80 COMMIT TRANSACTION sau giao tác thực xong, liệu bảng T là: A B 20 40 21 41 40 80 41 81 Như vậy, tác dụng lời gọi thủ tục sp_tranex 30,60 giao tác bị huỷ bỏ câu lệnh ROLLBACK TRANSACTION giao tác Như thấy ví dụ trên, giao tác SQL lồng vào nhau, giao tác giao tác có vai trò định Nếu giao tác ngồi uỷ thác (commit) giao tác lồng bên đồng thời uỷ thác; Và giao tác thực lệnh ROLLBACK giao tác lồng bên chịu tác động câu lệnh (cho dù giao tác lồng bên thực lệnh COMMIT TRANSACTION) 41 MỤC LỤC CHƯƠNG I THỦ TỤC LƯU TRỮ 1.1 Thủ tục lưu trữ (stored procedure) 1.1.1 Các khái niệm 1.1.2 Tạo thủ tục lưu trữ 1.1.3 Lời gọi thủ tục lưu trữ 1.1.4 Sử dụng biến thủ tục .4 1.1.5 Giá trị trả tham số thủ tục lưu trữ 1.1.6 Tham số với giá trị mặc định 1.1.7 Sửa đổi thủ tục 1.1.8 Xoá thủ tục .8 CHƯƠNG II TRIGGER 2.1 Định nghĩa trigger 2.2 Sử dụng mệnh đề IF UPDATE trigger 12 2.3 ROLLBACK TRANSACTION trigger 13 2.4 Sử dụng trigger trường hợp câu lệnh INSERT, UPDATE DELETE có tác động đến nhiều dòng liệu 15 2.4.1 Sử dụng truy vấn .15 2.4.2 Sử dụng biến trỏ 18 CHƯƠNG III HÀM 21 3.1 Hàm người dùng định nghĩa 21 3.1.1 Định nghĩa sử dụng hàm 21 3.1.2 Hàm với giá trị trả “dữ liệu kiểu bảng” 22 Bài tập .27 CHƯƠNG IV BẢO MẬT TRONG SQL 29 4.1 Các khái niệm 29 4.2 Cấp phát quyền 30 4.2.1 Cấp phát quyền cho người dùng đối tượng sở liệu 30 4.2.2 Cấp phát quyền thực thi câu lệnh .32 4.3 Thu hồi quyền .33 4.3.1 Thu hồi quyền đối tượng sở liệu: 33 4.3.2 Thu hồi quyền thực thi câu lênh: .36 CHƯƠNG V GIAO TÁC SQL .37 5.1 Giao tác tính chất giao tác 37 5.2 Mơ hình giao tác SQL 37 5.3 Giao tác lồng 40 42 ...đơn giản thay phải sử dụng nhiều dòng lệnh SQL Điều làm giảm thiểu lưu thông mạng • Thay cấp phát quyền trực tiếp cho người sử dụng câu lệnh SQL đối tượng sở liệu, ta cấp phát quyền cho người... RETURNS Cũng tương tự hàm nội tuyến, dạng hàm sử dụng câu lệnh SQL với vai trò bảng hay khung nhìn Ví dụ minh hoạ cách sử dụng dạng hàm SQL Ví dụ 3.5: Ta định nghĩa hàm func_TongSV sau: CREATE FUNCTION... DELETE bảng SQL cung cấp hai câu lệnh cho phép thiết lập sách bảo mật sở liệu: • Lệnh GRANT: Sử dụng để cấp phát quyền cho người sử dụng đối tượng sở liệu quyền sử dụng câu lệnh SQL sở liệu 29

Ngày đăng: 09/06/2018, 21:57

Từ khóa liên quan

Mục lục

  • CHƯƠNG I THỦ TỤC LƯU TRỮ

    • 1.1 Thủ tục lưu trữ (stored procedure)

      • 1.1.1 Các khái niệm

      • 1.1.2 Tạo thủ tục lưu trữ

      • 1.1.3 Lời gọi thủ tục lưu trữ

      • 1.1.4 Sử dụng biến trong thủ tục

      • 1.1.5 Giá trị trả về của tham số trong thủ tục lưu trữ

      • 1.1.6 Tham số với giá trị mặc định

      • 1.1.7 Sửa đổi thủ tục

      • 1.1.8 Xoá thủ tục

  • CHƯƠNG II TRIGGER

    • 2.1 Định nghĩa trigger

    • 2.2 Sử dụng mệnh đề IF UPDATE trong trigger

    • 2.3 ROLLBACK TRANSACTION và trigger

    • 2.4 Sử dụng trigger trong trường hợp câu lệnh INSERT, UPDATE và DELETE có tác động đến nhiều dòng dữ liệu

      • 2.4.1 Sử dụng truy vấn con

      • 2.4.2 Sử dụng biến con trỏ

  • CHƯƠNG III HÀM

    • 3.1. Hàm do người dùng định nghĩa

      • 3.1.1 Định nghĩa và sử dụng hàm

      • 3.1.2 Hàm với giá trị trả về là “dữ liệu kiểu bảng”

  • Bài tập

  • CHƯƠNG IV BẢO MẬT TRONG SQL

    • 4.1 Các khái niệm

    • 4.2 Cấp phát quyền

      • 4.2.1 Cấp phát quyền cho người dùng trên các đối tượng cơ sở dữ liệu

      • 4.2.2 Cấp phát quyền thực thi các câu lệnh

    • 4.3 Thu hồi quyền

      • 4.3.1 Thu hồi quyền trên đối tượng cơ sở dữ liệu:

      • 4.3.2 Thu hồi quyền thực thi các câu lênh:

  • CHƯƠNG V GIAO TÁC SQL

    • 5.1 Giao tác và các tính chất của giao tác

    • 5.2 Mô hình giao tác trong SQL

    • 5.3 Giao tác lồng nhau

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan