2009-05-22 38 views

Trả lời

7

Bạn KHÔNG cần phải lo lắng về việc họ có quyền truy cập công cụ. Chỉ cần đảm bảo rằng họ không biết bất kỳ thông tin đăng nhập SQL nào cho các Cơ sở dữ liệu cụ thể có quyền đọc/ghi, nếu có, hãy thay đổi mật khẩu. Nếu họ có quyền truy cập vào DB thông qua Xác thực Windows, hãy đảm bảo rằng họ đang ở trong vai trò datareader. Bạn có thể sử dụng các vai trò để quản lý những gì người dùng có thể thực hiện trong SQL.

+0

Tôi cần kết nối với cơ sở dữ liệu và thực hiện một số nội dung nhưng chỉ với một ứng dụng nội bộ. Không phải với quản lý. –

4

Tôi khuyên bạn nên khóa cơ sở dữ liệu và cung cấp quyền thích hợp chỉ đọc (hoặc khác) cho người dùng. Bằng cách đó người dùng vẫn có thể sử dụng studio quản lý để chạy các truy vấn chọn lọc và như vậy.

Nếu bạn không muốn người dùng có bất kỳ quyền nào, bạn cũng có thể làm điều đó.

1

Nếu ứng dụng của bạn chỉ sử dụng thủ tục được lưu trữ để sửa đổi dữ liệu, bạn có thể cấp cho người dùng cuối quyền truy cập để chạy procs được lưu trữ, nhưng từ chối họ truy cập để sửa đổi bảng.

1
  • Đừng cho họ biết thông tin đăng nhập cơ sở dữ liệu là gì.
  • Nếu bạn không thể hạn chế đăng nhập, hãy sử dụng các thủ tục được lưu trữ dành riêng cho các bản cập nhật và vô hiệu hóa mọi quyền CREATE, DELETE, INSERT hoặc UPDATE cho người dùng đó.
1

An Application Role sẽ cho phép bạn bảo mật đối tượng cơ sở dữ liệu vào ứng dụng của bạn thay vì người dùng đã đăng nhập.

0

Tôi đồng ý với Jon Erickson như một quy luật chung

  • tôi không cho phép bất kỳ người dùng truy cập vào các bảng, nhưng chỉ cho phép truy cập thông qua lưu trữ procs
  • không cho phép người dùng nói chung chiếm quyền truy cập vào procs lưu trữ, nhưng chỉ tài khoản mà ứng dụng của bạn chạy dưới (cho dù đó là thông tin đăng nhập hoặc đăng nhập SQL tích hợp)
0

Sử dụng tốt vai trò Cơ sở dữ liệu, nếu người dùng chỉ có quyền truy cập SELECT (đọc) gán vai trò db_datareader. Ngay cả khi họ đăng nhập bằng SSMS, họ sẽ chỉ có thể thực hiện các câu lệnh SELECT.

14

Bạn có thể sử dụng lệnh DENY VIEW ANY DATABASE cho (các) người dùng cụ thể. Đây là một tính năng mới có sẵn trong SQL Server 2008.

Nó ngăn người dùng nhìn thấy danh mục hệ thống (sys.databases, sys.sysdatabases, vv) và do đó làm cho DB vô hình với chúng trong SQL Management Studio (SSMS)).

Chạy lệnh này từ cơ sở dữ liệu Master:

DENY VIEW ANY DATABASE TO 'loginName' 

Người dùng vẫn có thể truy cập vào cơ sở dữ liệu thông qua ứng dụng của bạn. Tuy nhiên, nếu họ đăng nhập thông qua SSMS, cơ sở dữ liệu của bạn sẽ không hiển thị trong danh sách cơ sở dữ liệu và nếu họ mở cửa sổ truy vấn, cơ sở dữ liệu của bạn sẽ không xuất hiện trong trình đơn thả xuống.

Tuy nhiên, đây không phải là bằng chứng lừa đảo. Nếu người dùng đủ thông minh để chạy Lệnh Truy vấn:

USE <YourDatabaseName> 

Sau đó, họ sẽ thấy cơ sở dữ liệu trong Trình phân tích Truy vấn.

Vì giải pháp này đang đưa bạn 90% ở đó, tôi sẽ cung cấp cho cơ sở dữ liệu một số tên tối nghĩa không cho người dùng biết tên của cơ sở dữ liệu.

+2

Nếu bạn muốn DOWNVOTE, đó là tốt, nhưng được trưởng thành và lịch sự, đủ để lại một bình luận là tại sao bạn nghĩ rằng tôi sai. –

+0

Nó không nói rằng họ cần phải có * chỉ đọc * truy cập thông qua ứng dụng của họ, nó nói rằng ông không muốn họ có thể tự chỉnh sửa các bảng thông qua SSMS –

2

Nếu ứng dụng của bạn đang chạy dưới dạng tài khoản dịch vụ/người dùng thì chỉ tài khoản đó yêu cầu quyền truy cập vào cơ sở dữ liệu. Tài khoản của người dùng cá nhân không yêu cầu bất kỳ quyền truy cập nào vào cơ sở dữ liệu và do đó họ thậm chí sẽ không có quyền truy cập đọc. Ứng dụng của bạn sẽ là cổng vào dữ liệu.

Nếu người dùng đang chạy ứng dụng trong tài khoản người dùng của họ thì cấp cho họ quyền chỉ đọc. Bạn có thể chỉ cần thêm chúng vào vai trò db_datareader.

Hy vọng điều này sẽ hữu ích!

1

Bạn có thể từ chối quyền truy cập của người dùng vào tệp thi hành ssms.exe, đồng thời cấp quyền cho người dùng/quản trị viên có liên quan.

2

Bạn có thể sử dụng trình kích hoạt.

CREATE TRIGGER [TR_LOGON_APP] 
ON ALL SERVER 
FOR LOGON 
AS 
BEGIN 

    DECLARE @program_name nvarchar(128) 
    DECLARE @host_name nvarchar(128) 

    SELECT @program_name = program_name, 
     @host_name = host_name 
    FROM sys.dm_exec_sessions AS c 
    WHERE c.session_id = @@spid 


    IF ORIGINAL_LOGIN() IN('YOUR_APP_LOGIN_NAME') 
     AND @program_name LIKE '%Management%Studio%' 
    BEGIN 
     RAISERROR('This login is for application use only.',16,1) 
     ROLLBACK; 
    END 
END; 

https://www.sqlservercentral.com/Forums/1236514/How-to-prevent-user-login-to-SQL-Management-Studio-#bm1236562

+0

Điều này có vẻ là câu trả lời tốt nhất ở đây mà trực tiếp địa chỉ câu hỏi của OP. – Sturgus

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