intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Câu lệnh EXECUTE AS trong SQL Server 2005

Chia sẻ: Abcdef_43 Abcdef_43 | Ngày: | Loại File: PDF | Số trang:5

141
lượt xem
11
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Trong SQL Server 2005, bạn hoàn toàn có thể xác định được rõ ràng ngữ cảnh thực thi của một người dùng cụ thể. Như đã biết, một session (phiên làm việc) bắt đầu khi người dùng đăng nhập vào SQLServer hoặc kết nối tới SQLServer. Tất cả hoạt động trong sesstion đó dùng các ủy nhiệm đăng nhập được sử dụng để kết nối tới SQL Server. Khi câu lệnh EXECUTE AS chạy, ngữ cảnh thực thi của session sẽ chuyển tới login hay tên người dùng. Đây là một tiện ích rất có lợi cho những người...

Chủ đề:
Lưu

Nội dung Text: Câu lệnh EXECUTE AS trong SQL Server 2005

  1. Câu lệnh EXECUTE AS trong SQL Server 2005 Trong SQL Server 2005, bạn hoàn toàn có thể xác định được rõ ràng ngữ cảnh thực thi của một người dùng cụ thể. Như đã biết, một session (phiên làm việc) bắt đầu khi người dùng đăng nhập vào SQLServer hoặc kết nối t ới SQLServer. Tất cả hoạt động trong sesstion đó d ùng các ủy nhiệm đăng nhập được sử dụng để kết nối tới SQL Server. Khi câu lệnh EXECUTE AS chạy, ngữ cảnh thực thi của session sẽ chuyển tới login hay t ên người dùng. Đây là một tiện ích rất có lợi cho nh ững người quản trị c ơ sở dữ liệu SQL Server 2005 khi họ cần kiểm tra sự cho phép của từng ng ười dùng cụ thể. Nó còn rất hữu ích khi người dùng muốn thực thi một hàm được lưu trữ trong ngữ cảnh của người dùng khác. Bài này sẽ giải thích tính hữu ích của câu lệnh EXECUTE AS đối với người quản trị cơ sở dữ liệu. Giả dụ quản trị c ơ sở dữ liệu Mr.Smith muốn tạo một tài khoản đăng nhập SQL Server cho Shiraishi và cấp phát truy cập tới các cửa sổ đăng nhập “SQL2005/Shiraishi” m ột cách dễ dàng. Thêm vào đó, anh ấy trao quyền chỉ đọc tới bảng products trong giản đồ CompanyProducts. Tuy nhi ên, người quản lý không muốn Ms.Shiraishi có thể truy cập vào bảng productprice trong cùng giản đồ đó. Với tình huống đó chúng ta phải có cơ sở dữ liệu dưới, CompanyProducts: USE [master] GO /****** Object: Database [CompanyProducts] Script Date: 03/26/2006 19:32:40 ******/ IF EXISTS (SELECT name FROM sys.databases WHERE name = N'CompanyProducts') DROP DATABASE [CompanyProducts] go create database CompanyProducts go USE [CompanyProducts] GO /****** Object: Schema [CompanyCustomers] Script Date: 03/26/2006 19:33:45 ******/ IF EXISTS (SELECT * FROM sys.schemas WHERE name = N'CompanyCustomers')
  2. DROP SCHEMA [CompanyCustomers] go create Schema CompanyProducts go USE [CompanyProducts] GO /****** Object: Table [CompanyProducts].[Products] Script Date: 03/26/2006 19:34:32 ******/ IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[CompanyProducts].[Products]') AND type in (N'U')) DROP TABLE [CompanyProducts].[Products] go Create table CompanyProducts.Products (id int, Name varchar(100)) go insert into CompanyProducts.Products select 1,'Refrigerator' go insert into CompanyProducts.Products select 2,'Washing Machine' go insert into CompanyProducts.Products select 3,'Dryer' go insert into CompanyProducts.Products select 4,'Lawn Mower' go USE [CompanyProducts] GO /****** Object: Table [CompanyProducts].[ProductPrice] Script Date: 03/26/2006 19:34:12 ******/ IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[CompanyProducts].[ProductPrice]') AND type in (N'U')) DROP TABLE [CompanyProducts].[ProductPrice] go Create table CompanyProducts.ProductPrice
  3. (id int, Price money) go insert into CompanyProducts.ProductPrice select 1,7000 go insert into CompanyProducts.ProductPrice select 2,1000 go insert into CompanyProducts.ProductPrice select 3,1000 go insert into CompanyProducts.ProductPrice select 4,2500 go Khi Mr.Smith là m ột người quản trị c ơ sở dữ liệu, anh ấy log on tới Management Studio sử dụng SA để đăng nhập. Mr.Smith thực thi các câu lệnh dưới để tạo một tài khoản đăng nhập và người dùng cho Ms.Shiraishi use master go create login Shiraishi with password ='Sh!r@!sh!' go create login [SQL2005\Shiraishi] from windows go use CompanyProducts go Create user SQL_Shiraishi for LOGIN Shiraishi go Create user WIN_Shiraishi for LOGIN [SQL2005\Shiraishi] go GRANT SELECT on CompanyProducts.Products to SQL_Shiraishi,WIN_Shiraishi go DENY SELECT on CompanyProducts.ProductPrice to SQL_Shiraishi,WIN_Shiraishi Go Mr.Smith muốn kiểm tra quyền cấp phép cho cả đăng nhập SQL và Windows của Ms.Shiraishi. Khi đăng nhập SQL đã được tạo bởi Smith, anh ấy sẽ biết
  4. password đăng nhập Shiraishi và có thể kiểm tra quyền cấp phép trong Login bằng cách sử dụng tiện ích SQLCMD hoặc Ma nagement Studio. Thật không hay là SQL2005\Shiraishi là một đăng nhập Windows và Mr.Smith (hay bất kỳ một người quản trị hệ thống n ào) cũng không có password. Chỉ Ms.Shiraishi là có nó và tất nhiên là không thể tự dưng hỏi một người nào đó password của họ được. Mr.Smith có thể kiểm tra các cấp phép trong cả đăng nhập SQL v à Windows bằng cách sử dụng câu lệnh EXECUTE AS mới trong SQL Server 2005, vậy l à vấn đề trên đã được giải quyết. use CompanyProducts go Execute as user = 'SQL_Shiraishi' select * from CompanyProducts.Products --RESULT 1 Refrigerator 2 Washing Machine 3 Dryer 4 Lawn Mower select * from CompanyProducts.ProductPrice --RESULT Msg 229, Level 14, State 5, Line 1 SELECT permission denied on object 'ProductPrice', database 'CompanyProducts', schema 'CompanyProducts'. Mr.Smith m ở cửa sổ truy vấn mới và thực thi các câu lệnh d ưới đây Execute as user = 'WIN_Shiraishi' select * from CompanyProducts.Products --RESULT 1 Refrigerator 2 Washing Machine 3 Dryer 4 Lawn Mower select * from CompanyProducts.ProductPrice --RESULT Msg 229, Level 14, State 5, Line 1
  5. SELECT permission denied on object 'ProductPrice', database 'CompanyProducts', schema 'CompanyProducts'. Kết luận Trong bài này, chúng tôi đã giải thích tác dụng của câu lệnh EXECUTE AS mới trong SQL Server 2005. Nó sẽ rất có ích cho các quản trị vi ên cơ sở dữ liệu khi cần kiểm tra các cấp phép của một ng ười dùng cụ thể. TH - HT
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2