Chỳng ta đó thấy trong vớ dụ 8.35, điều quan trọng đối với một người sử dụng (tức là một authoriationID) là cú cỏc quyền cần thiết. Nhưng ở trờn, chỳng ta vừa thấy cỏch duy nhất để cú cỏc quyền trờn một phần tử cơ sở dữ liệu là phải là người tạo ra và là chủ của phần tử đú. SQL cung cấp lệnh GRANT cho phộp một người sử dụng cấp một uyền cho người khỏc. Người sử dụng thứ nhất vẫn tiếp tục cú đặc quyền đó được cho đi ; như vậy, GRANT cú thể được hiểu như là “copy quyền”.
Cú một điểm khỏc nhau quan trọng giữa cấp cỏc đặc quyền và sao chộp. Mỗi một quyền cú một grant option liờn kết. Như vậy, một người sử dụng cú thể cú một quyền như là SELECT trờn bảng Movie “with grant option”, trong khi người sử dụng thứ hai cú cựng đặc quyền nhưng khụng cú grant option. Khi đú, người sử dụng thứ nhất cú thể cấp quyền SELECT trờn Movie cho một người sử dụng thứ ba và việc cấp này cú thể với hoặc khụng
với grant option. Tuy nhiờn, người sử dụng thứ hai khụng thể cấp quyền SELECT trờn Movie cho bất cứ ai.
Lệnh Grant bao gồm cỏc phần tử sau: 1. Từ khúa GRANT
2. Một danh sỏch gồm một hoặc nhiều quyền, chẳng hạn SELECT hoặc INSERT(name). Một cỏch tựy chọn, cỏc từ khúa ALL PRIVILEGES cú thể xuất hiện ở đõy (chỉ tất cả cỏc quyền đối với cơ sở dữ liệu đang xột) 3. Từ khúa ON
4. Một phần tử cơ sở dữ liệu. Phần tử này thường là một quan hệ, hoặc một bảng cơ sở hoặc một khung nhỡn. Nú cũng cú thể là một miền hoặc là cỏc phần tử khỏc.
5. Từ khúa TO
6. Một danh sỏch gồm một hoặc nhiều người sử dụng (cỏc authorization ID).
7. Cỏc từ khúa WITH GRANT OPTION (tựy chọn). Như vậy, dạng của lệnh GRANT là
GRANT < danh sỏch quyền> ON < phần tử của CSDL> TO < danh sỏch người sử dụng>[< WITH GRANT OPTION>].
Để thực hiện lệnh grant này một cỏch hợp phỏp, người thực hiện nú phải cú quyền được cấp và cỏc quyền này phải được giữ với grant option. Tuy nhiờn, người cấp quyền cú thể cú quyền tổng quỏt hơn (with grant option) quyền được đem cấp. Vớ dụ, quyền INSERT(name) trờn bảng Studio cú thể được đem cấp trong khi người cấp giữ quyền tổng quỏt hơn INSERT vào bảng Studio với grant option.
Vớ dụ 3.36: Người sử dụng Hoa là chủ của lược đồ MovieSchema chứa cỏc bảng
Movie(title, year, length, inColor, studioName, producerC#) Studio(name, address, pres#)
cấp cỏc quyền INSERT và SELECT trờn bảng Studio và quyền SELECT trờn Movie cho cỏc người sử dụng Nam và Thanh. Hơn nữa, anh ta kốm theo grant option đối với cỏc quyền này. Cỏc lệnh Grant là:
GRANT SELECT, INSERT ON Studio TO nam,thanh WITH GRANT OPTION;
GRANT SELECT ON Movie TO nam,thanh WITH GRANT OPTION;
Bõy giờ, Thanh cấp cho người sử dụng Huy cỏc quyền đú nhưng khụng cú grant option. Thanh thực hiện cỏc lệnh:
GRANT SELECT, INSERT ON Studio TO huy; GRANT SELECT ON Movie TO huy ;
Cũng như vậy, Nam cấp cho Huy cỏc quyền tối thiểu đối với phộp chốn INSERT(name) trờn Studio và SELECT trờn Movie. Cỏc lệnh là:
GRANT SELECT, INSERT(name) ON Studio TO huy ; GRANT SELECT ON Movie TO huy ;
Chỳ ý rằng huy đó nhận quyền SELECT trờn Movie và Studio từ hai người sử dụng khỏc nhau. Anh ta cũng nhận quyền Insert(name) trờn Studio hai lần: một cỏch trực tiếp từ Nam và thụng qua quyền tổng quỏt hơn INSERT từ Thanh.