PDA

View Full Version : Câu lệnh EXECUTE AS trong SQL Server 2005



thanhtt
25-04-07, 07:06 PM
Câu lệnh EXECUTE AS trong SQL Server 2005
http://www.3c.com.vn/Uploaded/annt/Database/CaulenhExecute/image_16648.jpgTrong 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
GO
/****** Object: Database
Script Date: 03/26/2006 19:32:40 ******/
IF EXISTS (SELECT name FROM sys.databases
WHERE name = N'CompanyProducts')
DROP DATABASE
go
create database CompanyProducts
go
USE
GO
/****** Object: Schema
Script Date: 03/26/2006 19:33:45 ******/
IF EXISTS (SELECT * FROM sys.schemas
WHERE name = N'CompanyCustomers')
DROP SCHEMA
go
create Schema CompanyProducts
go
USE
GO
/****** Object: Table
.
Script Date: 03/26/2006 19:34:32 ******/
IF EXISTS (SELECT * FROM sys.objects
WHERE object_id =
OBJECT_ID(N'.')
AND type in (N'U'))
DROP TABLE .
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
GO
/****** Object: Table .
Script Date: 03/26/2006 19:34:12 ******/
IF EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'.')
AND type in (N'U'))
DROP TABLE .
go
Create table CompanyProducts.ProductPrice
(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

anonymous
25-04-07, 09:50 PM
SQL 205 thì mình chưa dùng, cảm ơn thanhtt cái đã rùi tìm hiểu sau. :)

hqckcang
27-10-08, 03:47 PM
Tôi đang tìm hiểu về cách sử dụng câu lệnh trong SQL 2005, bạn nào có tài liệu hướng dẫn về những câu lệnh để truy suất đến CSDL của SQL 2005 thì chỉ cho tôi với.:002: