2012-04-18 26 views
6

Chúng tôi có một số cơ sở dữ liệu trên máy chủ SQL. Chúng tôi muốn tạo 1 người dùng mới có thể xem cơ sở dữ liệu 'c' nhưng không thể thấy phần còn lại của cơ sở dữ liệu.Tạo người dùng chỉ có thể xem một cơ sở dữ liệu và chỉ chọn từ cơ sở dữ liệu đó?

Người dùng này chỉ có thể chọn từ cơ sở dữ liệu này và không có gì khác.
Tôi đã googleing và đang tìm kiếm một lúc, và gần nhất tôi thấy là từ chối xem bất kỳ cơ sở dữ liệu nào, và sau đó biến chúng thành chủ sở hữu cơ sở dữ liệu.

Nhưng tôi không nghĩ rằng nó sẽ làm việc để hạn chế họ lựa chọn, trừ khi có cách nào tôi có thể từ chối tất cả mọi thứ ngoại trừ chọn trên một chủ sở hữu cơ sở dữ liệu?

Cảm ơn trước sự giúp đỡ nào!

Chỉnh sửa: SQL Server 2008 R2, nhân tiện.

Chỉnh sửa2: Rất tiếc, tôi không rõ ràng trong bài đăng gốc của mình. Tôi đang tìm cách để làm cho nó như vậy khi họ đăng nhập họ thậm chí sẽ không nhìn thấy tên của cơ sở dữ liệu khác, không chỉ là họ không thể truy cập chúng.

Cảm ơn.

Trả lời

4
  1. Tạo người dùng trên máy chủ
  2. Thêm người dùng cơ sở dữ liệu cho
  3. Grant chỉ đọc truy cập vào cơ sở dữ liệu

    SỬ DỤNG [chủ] CREATE LOGIN [SomeUserName] VỚI MẬT KHẨU = N'someStr0ngP @ ssword', DEFAULT_DATABASE = [c], DEFAULT_LANGUAGE = [us_english], CHECK_EXPIRATION = ON, CHECK_POLICY = ON GO

    SỬ DỤNG [c] CR EATE USER [SomeUserName] để đăng nhập [SomeUserName] VỚI DEFAULT_SCHEMA = [dbo] GO

    EXEC sp_addrolemember N'db_datareader 'N'SomeUserName'

+1

Hãy nhớ rằng trong năm 2008 tất cả người dùng được cấp vai trò cấp máy chủ "Công khai" không thể lấy đi. Nếu bạn chỉ muốn họ nhìn thấy một cơ sở dữ liệu, và bạn không thể giới hạn quyền truy cập của họ thông qua các thủ tục được lưu trữ hoặc tầng giữa khác, bạn sẽ phải từ chối tất cả các cơ sở dữ liệu khác vào vai trò Public (có thể làm rối loạn mọi người). –

+1

Tôi có thể hiểu nhầm, hoặc tôi có thể không rõ ràng trong bài viết gốc của tôi. Tôi có nghĩa là người dùng sẽ không thể nhìn thấy các cơ sở dữ liệu khác như trong nếu họ đăng nhập vào studio quản lý, cơ sở dữ liệu khác thậm chí sẽ không hiển thị. Với điều này, họ sẽ vẫn hiển thị, và họ sẽ không thể vào cơ sở dữ liệu, đúng không? Có anyway để làm cho nó để họ thậm chí không thể nhìn thấy cơ sở dữ liệu? – Kyle

+2

"Bạn sẽ cần phải thu hồi quyền 'XEM BẤT K DAT DATABASE' từ vai trò PUBLIC (SQL SERVER 2005 trở đi)". Tôi đã đánh cắp nó từ [bài đăng khác ...] (http://stackoverflow.com/questions/935018/hide-sql-database-from-management-studio). Hãy xem ở đó để biết thêm thông tin. –

1

phủ nhận là hành vi mặc định khi nói đến phép vì vậy nếu bạn tạo một người dùng và thêm nó vào vai trò db_datareader trên db cần thiết, đó là quyền duy nhất nó sẽ có. It wont có thể truy cập cơ sở dữ liệu khác

EDIT:

use [master] 
GO 
DENY VIEW ANY DATABASE TO [login] 
GO 
use [master] 
GO 
DENY VIEW SERVER STATE TO [login] 
GO 

rằng sẽ loại bỏ abbility của đăng nhập để xem các cơ sở dữ liệu. Sau đó, chuyển đến người bạn muốn anh ấy xem và biến anh ấy thành chủ sở hữu của DB

+0

Xin lỗi, tôi không rõ ràng trong bài đăng của tôi. Tôi đang cố gắng để làm cho nó để họ thậm chí sẽ không nhìn thấy các căn cứ khác đang có, hoặc tên của họ. Không chỉ để họ không thể truy cập chúng. Cảm ơn sự giúp đỡ. – Kyle

+0

ok, hãy thử chỉnh sửa của tôi – Diego

0

Có thể thao tác này sẽ hoạt động.

Thêm người dùng vào máy chủ và ánh xạ tới cơ sở dữ liệu chính xác. Xóa người dùng khỏi Máy chủ.

Máy chủ sẽ thông báo cho bạn Xóa người dùng máy chủ sẽ không xóa người dùng cơ sở dữ liệu được liên kết với thông tin đăng nhập này.

Nhấp vào OK và bạn sẽ có người dùng chỉ có quyền truy cập vào một cơ sở dữ liệu.

1

Bước 1: Tạo Login

Bước 2: Loại bỏ tất cả sự cho phép xem DB từ lần đăng nhập

deny view any database to LogInName 

Bước-3: Cho phép đăng nhập của cơ sở dữ liệu

alter authorization on database:: DataBaseName to LogInName 

Lưu ý: Không cần chỉ định tên người dùng hoặc tên cơ sở dữ liệu trong dấu ngoặc đơn

+0

Tôi không chắc chắn câu trả lời này thậm chí thực sự liên quan đến câu hỏi này. Đó là sai, ở mức nào. –

+0

Làm thế nào điều này là sai: Bạn nói "Thu hồi", nhưng sau đó lệnh của bạn là "từ chối". Đó là những điều rất khác nhau. 'deny' sẽ chặn hoàn toàn người dùng xem bất kỳ cơ sở dữ liệu nào. 'revoke' sẽ hoạt động một phần, có lẽ ... ngoại trừ việc thêm người dùng vào cơ sở dữ liệu sẽ không hoạt động. Họ cần phải là chủ sở hữu để xem nó khi họ không có quyền 'xem bất kỳ' nào. –

+0

Tôi không biết tại sao bạn đánh dấu câu trả lời là tiêu cực @AndrewBarber .. Bất kỳ cách nào tôi không phải là một anh chàng máy chủ geek sql .. nhưng nó làm việc cho tôi ... Và câu trả lời chỉ tập trung vào câu hỏi đã được hỏi. .. cho những gì tôi googled .. – Moumit

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