2012-04-06 34 views
8

diffrence giữa là gì ...SQL Server Execute Mạo danh

execute as user = 'testuser' 

execute as login = 'testuser' 

Tôi đang thực hiện một thủ tục cơ sở dữ liệu chéo theo các thông tin đăng nhập và nó hoạt động với exececute như đăng nhập nhưng không thực hiện như người dùng. Người ta nói máy chủ "testuser" chính là nt có thể truy cập cơ sở dữ liệu "xxx" trong bối cảnh securty.

Khi tôi SELECT SYSTEM_USER sau khi cả hai lệnh tôi thấy rằng nó được thiết lập để 'testuser'

Trả lời

11

execute as login cung cấp mạo danh cho toàn bộ máy chủ, kể từ lần đăng nhập là về mặt kĩ server. Vì người dùng được xác định cho mỗi cơ sở dữ liệu, nên execute as user mạo danh chỉ áp dụng cho một cơ sở dữ liệu cụ thể, đó là lý do tại sao bạn thấy lỗi khi bạn vượt qua cơ sở dữ liệu.

3

Ví dụ để Execute Như:

CREATE PROCEDURE dbo.MyProcedure VỚI EXECUTE AS CHỦ ĐẦU

Trong trường hợp này, bạn đang mạo danh chủ sở hữu của mô-đun đang được gọi. Bạn cũng có thể mạo danh SELF, HOẶC người dùng tạo hoặc thay đổi mô-đun HOẶC ... CALLER bất hoạt, sẽ cho phép mô-đun nhận quyền truy cập của người dùng hiện tại, HOẶC ... mạo danh OWNER, sẽ thực hiện sự cho phép của chủ sở hữu thủ tục được gọi là HOẶC ... mạo danh 'user_name', sẽ mạo danh người dùng cụ thể HOẶC ... mạo danh 'login_name' với sẽ mạo danh một thông tin đăng nhập cụ thể.

Quyền cài đặt trên các đối tượng như quy trình được lưu trữ có thể được thực hiện bằng "TRẠM THỰC HÀNH BẬT.,;
Tuy nhiên, bạn cũng có thể muốn cấp quyền bảo mật ở cả cấp độ đăng nhập và người dùng. YOu sẽ muốn xác định và cấp chỉ các quyền cần thiết cho các đối tượng yêu cầu quyền truy cập (chẳng hạn như thực hiện). Hãy xem xét sử dụng khả năng "EXECUTE AS" cho phép mạo danh người dùng khác để xác thực các quyền cần thiết để thực thi mã KHÔNG CÓ cấp tất cả các điều cần thiết quyền đối với tất cả các đối tượng cơ bản (ví dụ: bảng) Có thể thêm EXECUTE AS vào các procs, chức năng, trình kích hoạt được lưu trữ, v.v.

MOST của thời gian, bạn sẽ chỉ cần cấp quyền EXECUTE cho procs được lưu trữ và sau đó quyền được cấp cho tất cả các đối tượng được tham chiếu trong proc được lưu trữ. Bằng cách này, bạn không cần phải cung cấp các quyền ngầm định (ví dụ: để cập nhật dữ liệu hoặc gọi các chương trình bổ sung). Quyền sở hữu chuỗi xử lý việc này cho bạn. Điều này đặc biệt hữu ích cho sql động hoặc nếu bạn cần tạo các tác vụ bảo mật nâng cao như CREATE TABLE. EXECUTE AS là một công cụ hữu ích để xem xét cho chúng.

ví dụ này có thể giúp làm sáng tỏ tất cả những điều này:

Tạo một người dùng gọi NoPrivUser với truy cập công cộng để một cơ sở dữ liệu (ví dụdbadb)

SỬ DỤNG [chủ] GO CREATE LOGIN [NoPrivUser] VỚI PASSWORD = N'ABC5%', DEFAULT_DATABASE = [dbadb], CHECK_EXPIRATION = ON, CHECK_POLICY = ON GO SỬ DỤNG [DBAdb] GO TẠO NGƯỜI DÙNG [NoPrivUser] ĐĂNG NHẬP [NoPrivUser] GO

GHI CHÚ: CREATOR HOẶC CHỦ SỞ HỮU QUY TRÌNH NÀY S RE TẠO TẠO BẢNG QUYỀN trong cơ sở dữ liệu đích.

sử dụng DBAdb đi CREATE PROCEDURE dbo.MyProcedure VỚI EXECUTE AS CHỦ ĐẦU AS NẾU NOT EXISTS (SELECT * FROM sys.objects ĐÂU object_id = object_id (N '[dbo] .MyTable') VÀ gõ vào (N'U ')) CREATE TABLE MyTable (PKid int, column1 char (10)) INSERT INTO MyTable VALUES (1,' ABCDEF ')

GO

CẤP EXEC ON dbo.MyProcedure ĐẾN NoPrivUser ; GO

- Bây giờ hãy đăng nhập vào máy chủ cơ sở dữ liệu của bạn với tư cách là NoPrivUser và chạy như sau.

sử dụng dbadb đi

EXEC dbo.MyProcedure

(1 row (s) bị ảnh hưởng)

Bây giờ cố gắng chọn từ bảng khi mới đăng nhập như NoPrivuser.

Bạn sẽ nhận được như sau:

select * from MyTable đi

Msg 229, Level 14, State 5, Line 1 Việc cho phép CHỌN đã bị từ chối trên đối tượng 'MyTable', cơ sở dữ liệu ' DBAdb ', lược đồ' dbo '.

Điều đó được mong đợi vì bạn chỉ chạy quy trình trong ngữ cảnh bảo mật của Chủ sở hữu khi đăng nhập với tư cách là NoPrivUser.
NoPrivUser không có quyền đọc bảng thực sự. Chỉ cần thực hiện thủ tục tạo và chèn các hàng.

Với mệnh đề EXECUTE AS, thủ tục lưu sẵn được chạy trong ngữ cảnh của chủ sở hữu đối tượng. Mã này tạo thành công dbo.MyTable và các hàng được chèn thành công. Trong ví dụ này, người dùng "NoPrivUser" có quyền tuyệt đối không có quyền sửa đổi bảng, hoặc đọc hoặc sửa đổi bất kỳ dữ liệu nào trong bảng này.
Chỉ có các quyền cần thiết để hoàn thành nhiệm vụ cụ thể này được mã hóa WITHIN trong ngữ cảnh của quy trình này.

Phương pháp tạo quy trình được lưu trữ có thể thực hiện các tác vụ yêu cầu quyền bảo mật nâng cao mà không gán vĩnh viễn các quyền đó sẽ rất hữu ích.

Các vấn đề liên quan