Cấu hình hạn chế truy cập SQL Server chỉ cho nhìn thấy database được phân quyền

Mô tả

Ngữ cảnh được đặt ra như sau SQL của MS. Bạn đang cho thuê hosting server SQL MS Server có 100 CSDL. Cho nên có rất nhiều cơ sở dữ liệu của khách hàng mà không thể cho truy cập qua lại với nhau vì tính bảo mật của mỗi khách hàng. Ví dụ khách hàng muốn truy cập đúng database của khách hàng.

Cho nên chúng ta phải tạo ra một tài khoản đăng nhập mới (SQL Login) cho mỗi khách khách hàng nào muốn có quyền truy cập vào cơ sở dữ liệu của họ, mà không thấy dữ liệu còn lại. Dĩ nhiên Admin sẽ nhìn thấy tất cả.

Giải quyết- Solution

Cách 1 sử dụng Lệnh

Bước 1 Tạo a user mới:

create LOGIN nvp WITH PASSWORD='12345', CHECK_POLICY = OFF;
  • User: nvp
  • Password: 12345
  • Check_Policy: bỏ chính sách password phức tạp

Bước 2 Cấm xem tất cả database có trên hệ quản trị CSDL đối với user nvp vừa tạo bước 1:

USE master;
GO
DENY VIEW ANY DATABASE TO   nvp; 

Bước 3: Xác định owner hay ủy quyền database theo từng khách hàng mà họ đã thuê ví dụ customerDB

USE master;
GO
ALTER AUTHORIZATION ON DATABASE::customerDB TO nvp;
GO

Trường hợp trước đó chúng ta đã tạo user và giao cho cơ sở dữ liệu trước cho khách hàng rồi giờ cần giới hạn lại:

USE [customerDB] 
CREATE USER nvp FOR LOGIN nvp WITH DEFAULT_SCHEMA=[dbo]
GO

Nếu muốn xóa user SQL login dùng lệnh sau

USE  [customerDB]  
   GO
   DROP USER newlogin;
   GO

Cách 2: Dùng giao diện Microsoft SQL Studio Management (MSSM)

  1. Kết nối đến Máy chủ SQL Instance sử dụng MSSM.
  2. Vào tab Security -> Logins -> (RIGHT CLICK) New Login
  3. Điền thông tin đầy đủ
  4. Dưới User Mapping, chọn cơ sở dữ liệu bạn muốn người dùng có thể truy cập và định cấu hình
  5. Dưới user mapping, Đảm bảo rằng “sysadmin” is NOT CHECKED và chọn vào “db_owner” cho roles user mới tạo.
  6. access LOGIN properties (right click on login account)
  7. chọn mục SECURABLES
  8. Thêm đối tượng SERVER TYPE.
  9. List sẽ xuất hiện (Explicit permissions…), select VIEW ANY DATABASE chọn vào tùy chọn DENY

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *