Quyền SELECT bị từ chối trên đối tượng 'Người dùng', cơ sở dữ liệu 'XXX', lược đồ 'dbo'


82

Tôi đã di chuyển cơ sở dữ liệu từ SQL Server 2012 sang Azure. Tôi không muốn sử dụng người dùng master, vì vậy tôi đã tạo một người dùng test. Đây là những gì tôi đã làm cho cơ sở dữ liệu XXX trên Azure:

create user test from login test with default_schema=[dbo]
exec sp_addrolemember 'db_owner','test'

Tôi đã kiểm tra và các đối tượng cơ sở dữ liệu mà tôi quan tâm đều nằm trong lược đồ dbo. Bảng Usersnằm trong lược đồ dbo.

Chuỗi kết nối trong dự án web của tôi có testvai trò đăng nhập. Nó tạo ra thông báo lỗi:

The SELECT permission was denied on the object 'Users', database 'XXX', schema 'dbo'

Thông báo lỗi có nghĩa là gì và tôi có thể làm gì để cho phép người dùng testtruy cập cơ sở dữ liệu XXX?


Cảm ơn bạn đã đặt câu hỏi này :)
Kamlesh

Câu trả lời:


75

Tôi nghĩ vấn đề là người dùng đã từ chối các đặc quyền . Lỗi này xảy ra khi người dùng mà bạn đã tạo không có đủ đặc quyền để truy cập các bảng của bạn trong cơ sở dữ liệu. Cấp đặc quyền cho người dùng để có được những gì bạn muốn.

CẤP cho người dùng các quyền cụ thể như CHỌN, CHÈN, CẬP NHẬT và XÓA trên các bảng trong cơ sở dữ liệu đó.


3
Đôi khi bạn sẽ thiếu tùy chọn trình đọc dữ liệu db / chủ sở hữu db? windowstechinfo.com/2014/09/…
Aravinda

5
Tôi đã phải bỏ chọn 'db_denydatareader' và 'db_denydatawriter' và tôi đoán đó là ý nghĩa của SaeX khi "thu hồi". Cảm ơn SaeX.
À.

@AH. Tôi đã gặp vấn đề tương tự như bạn, vì vậy tôi đã viết một câu trả lời cho câu hỏi này. Hãy kiểm tra nếu bạn có cơ hội
Kolob Canyon

Bạn là người cứu rỗi cuộc sống, Cảm ơn rất nhiều :)
Kamlesh

56
  1. Mở SQL Management Studio
  2. Mở rộng cơ sở dữ liệu của bạn
  3. Mở rộng Thư mục "Bảo mật"
  4. Mở rộng "Người dùng"
  5. Nhấp chuột phải vào người dùng (người đang cố gắng thực hiện truy vấn) và chọn Properties.
  6. Chọn trang Membership.
  7. Hãy chắc chắn rằng bạn bỏ chọn

    db_denydatareader

    db_denydatawriter

nhập mô tả hình ảnh ở đây

Điều này không cần phải nói, nhưng chỉ cấp quyền cho những gì người dùng cần. Một cách dễ dàng sửa lỗi lười biếng là kiểm tra db_ownernhư tôi có, nhưng đây không phải là phương pháp bảo mật tốt nhất.


4
Bạn là người cứu rỗi cuộc sống, Cảm ơn rất nhiều :)
Kamlesh

1
Bạn đã giúp tôi tiết kiệm được GIỜ sử dụng googling lãng phí thời gian và sự thất vọng!
Scott Fleming

2
Nhiều người trong chúng ta chỉ đơn giản chọn tất cả chúng bằng cách giả định rằng chúng ta sẽ nhận được tất cả các quyền. Tuy nhiên có một denyquá
Murali Murugesan

30

Cú pháp để cấp quyền chọn trên một bảng cụ thể:

USE YourDB;

GRANT SELECT ON dbo.functionName TO UserName;

Để cấp quyền chọn trên tất cả các bảng trong cơ sở dữ liệu:

USE YourDB;

GRANT SELECT TO UserName;

2
Lần đầu tiên tôi làm điều này nên tôi không chắc liệu nó có đúng không, nhưng tôi muốn Cấp quyền chọn cho toàn bộ cơ sở dữ liệu nên tôi đã CẤP CHỌN CHO Tên Người dùng và bỏ qua điều khoản BẬT. Nó đã làm việc.
Rich

18

Đây là cách tôi có thể giải quyết vấn đề khi đối mặt với nó

  1. Khởi động SQL Management Studio.
  2. Mở rộng Nút máy chủ (trong 'Trình khám phá đối tượng').
  3. Mở rộng Nút cơ sở dữ liệu và sau đó mở rộng Cơ sở dữ liệu cụ thể mà bạn đang cố gắng truy cập bằng cách sử dụng người dùng cụ thể.
  4. Mở rộng nút Người dùng dưới nút Bảo mật cho cơ sở dữ liệu.
  5. Nhấp chuột phải vào người dùng cụ thể và nhấp vào 'thuộc tính'. Bạn sẽ nhận được một hộp thoại.
  6. Đảm bảo người dùng là thành viên của nhóm db_owner (vui lòng đọc các nhận xét bên dưới trước khi bạn sử dụng đường dẫn này) và các thay đổi bắt buộc khác bằng cách sử dụng chế độ xem. (Tôi đã sử dụng cái này cho năm 2016. Không chắc hộp thoại cụ thể trông như thế nào trong phiên bản khác và do đó không cụ thể)

6
Hãy cẩn thận với người bạn đặt vào vai trò cơ sở dữ liệu db_owner. Không phải tất cả người dùng nên được thêm vào vai trò đó.
Rod

1
@Rod Nếu việc cấp db_owner không được khuyến nghị, thì loại truy cập nào được khuyến nghị để ứng dụng tương tác với cơ sở dữ liệu?
Jacob

1
Công khai có đủ không?
Rod

2
@Jacob Để ghi và đọc dữ liệu trong bất kỳ bảng nào có id db_datareader và db_datawriter. db_owner cũng cấp quyền sửa đổi các định nghĩa bảng.
Oskar Berggren

3
Điều này không có tác dụng nếu người dùng đã kiểm tra db_denydatareadehoặcdb_denydatawriter
Kolob Canyon


0

Kiểm tra không gian của cơ sở dữ liệu của bạn. Lỗi này xảy ra khi không gian tăng lên so với không gian được cấp cho cơ sở dữ liệu.


Cũng Thay đổi cơ sở dữ liệu Userid và mật khẩu
Nilesh

0

Sử dụng SSMS, tôi đảm bảo rằng người dùng có quyền kết nối trên cả cơ sở dữ liệu và ReportServer.

Trên cơ sở dữ liệu cụ thể đang được truy vấn, trong các thuộc tính, tôi đã ánh xạ thông tin đăng nhập của chúng và kích hoạt bộ dữ liệu và quyền công khai. Ngoài ra, như những người khác đã nêu - tôi đảm bảo rằng không có hộp từ chối / từ chối ghi nào được chọn.

Tôi không muốn bật quyền sở hữu db khi báo cáo của họ vì họ chỉ cần có các quyền được chọn.


-1

Tôi giải quyết vấn đề của tôi khi làm việc này. [LƯU Ý QUAN TRỌNG: Nó cho phép các đặc quyền được nâng cấp (mở rộng) đối với tài khoản cụ thể, có thể nhiều hơn mức cần thiết cho từng trường hợp].

  1. Đi tới ' Trình khám phá đối tượng ' của SQL Management Studio.
  2. Mở rộng Bảo mật , sau đó Đăng nhập .
  3. Chọn người dùng bạn đang làm việc, sau đó nhấp chuột phải và chọn Thuộc tính Windows .
  4. Trong Chọn một trang , chuyển đến Vai trò máy chủ
  5. Nhấp vào sysadmin và lưu.

2
Không chắc chắn, tại sao câu trả lời này bị phản đối. Câu trả lời này đã giải quyết vấn đề của tôi. Vì vậy, tôi đã ủng hộ.
Emran Hussain

9
Câu trả lời này NÊN bị loại bỏ vì nó ngang nhiên nói với người đọc để cung cấp cho đối tượng người dùng toàn quyền, toàn bộ và toàn quyền kiểm soát toàn bộ máy chủ mà không giải thích hoặc cảnh báo rằng đây là những gì nó làm. Dựa trên từ ngữ của câu hỏi và câu trả lời này, tôi nghĩ rằng có một số nguy hiểm mà người dùng mới làm quen sẽ áp dụng "bản sửa lỗi" này mà không hiểu đầy đủ.
Oskar Berggren

3
Đây là một tùy chọn vũ phu không nên áp dụng. Nếu bạn không hiểu điều này đang làm thì bạn không nên làm điều đó.
n8.

Tất cả mọi người - không làm điều này trong môi trường sản xuất.
gotqn

Tất nhiên tôi sẽ không làm điều đó trong prod nhưng nó đã giải quyết được vấn đề của tôi (trong môi trường dev). Vì vậy, nó xứng đáng với sự ủng hộ của tôi. Cảm ơn ccassob.
Fl4v

-2

Có thể là bảng điều khiển Plesk của bạn hoặc đăng ký bảng điều khiển khác đã hết hạn .... vui lòng kiểm tra đăng ký Kết thúc.


Vui lòng cung cấp thêm một số mô tả xung quanh câu trả lời của bạn
asolanki
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.