Odmowa uprawnienia SELECT dla obiektu „Użytkownicy”, baza danych „XXX”, schemat „dbo”


83

Przeniosłem bazę danych z SQL Server 2012 na Azure. Nie chcę używać użytkownika master, więc utworzyłem użytkownika test. Oto, co zrobiłem dla bazy danych XXX na platformie Azure:

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

Sprawdziłem, a interesujące mnie obiekty bazy danych znajdują się w schemacie dbo. Tabela Usersznajduje się w schemacie dbo.

Parametry połączenia w moim projekcie sieci Web mają testjako login. Generuje komunikat o błędzie:

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

Co oznacza komunikat o błędzie i co mogę zrobić, aby umożliwić użytkownikowi testdostęp do bazy danych XXX?


Dzięki za zadanie tego pytania :)
— Kamlesh

Odpowiedzi:


76

Myślę, że problem polega na tym, że użytkownik ma uprawnienia odmowy . Ten błąd pojawia się, gdy utworzony przez Ciebie użytkownik nie ma wystarczających uprawnień dostępu do tabel w bazie danych. Przyznaj uprawnienia użytkownikowi, aby uzyskać to, czego chcesz.

PRZYZNAJ uprawnienia specyficzne dla użytkownika, takie jak SELECT, INSERT, UPDATE i DELETE do tabel w tej bazie danych.


3
Czasami brakuje opcji czytnika danych / właściciela bazy danych? windowstechinfo.com/2014/09/…
— Aravinda

5
Musiałem odznaczyć 'db_denydatareader' i 'db_denydatawriter' i myślę, że to właśnie oznacza SaeX przez "unieważnienie". Dzięki SaeX.
— AH.

@AH. Miałem ten sam problem co Ty, więc napisałem odpowiedź na to pytanie. Sprawdź to, jeśli masz szansę
— Kolob Canyon

Jesteś
— ratownikiem

58
  1. Otwórz SQL Management Studio
  2. Rozszerz swoją bazę danych
  3. Rozwiń folder „Zabezpieczenia”
  4. Rozwiń „Użytkownicy”
  5. Kliknij prawym przyciskiem myszy użytkownika (tego, który próbuje wykonać zapytanie) i wybierz Properties.
  6. Wybierz stronę Membership.
  7. Upewnij się, że odznaczyłeś

    db_denydatareader

    db_denydatawriter

wprowadź opis obrazu tutaj

To powinno być oczywiste, ale przyznaj uprawnienia tylko do tego, czego potrzebuje użytkownik. Łatwym leniwym rozwiązaniem jest sprawdzenie, db_ownerjak to zrobiłem, ale nie jest to najlepsza praktyka w zakresie bezpieczeństwa.


4
Jesteś
— ratownikiem

1
Zaoszczędziłeś mi GODZIN marnującego czas googlowania i frustracji!
— Scott Fleming

2
Wielu z nas po prostu wybiera je wszystkie, zakładając, że otrzymamy wszystkie uprawnienia. Jednak jest denyteż
— Murali Murugesan

30

Składnia umożliwiająca przyznanie uprawnienia do wyboru w określonej tabeli:

USE YourDB;

GRANT SELECT ON dbo.functionName TO UserName;

Aby nadać uprawnienie select do wszystkich tabel w bazie danych:

USE YourDB;

GRANT SELECT TO UserName;

2
Zrobiłem to pierwszy raz, więc nie jestem pewien, czy było to poprawne, ale chciałem udzielić uprawnienia wyboru dla całej bazy danych, więc zrobiłem GRANT SELECT TO UserName i opuściłem klauzulę ON. Zadziałało.
— Rich

18

W ten sposób mogłem rozwiązać problem, gdy się z nim zmierzyłem

  1. Uruchom SQL Management Studio.
  2. Rozwiń węzeł serwera (w „Eksploratorze obiektów”).
  3. Rozwiń węzeł baz danych, a następnie rozwiń określoną bazę danych, do której próbujesz uzyskać dostęp za pomocą określonego użytkownika.
  4. Rozwiń węzeł Użytkownicy w węźle Zabezpieczenia dla bazy danych.
  5. Kliknij prawym przyciskiem myszy konkretnego użytkownika i kliknij „Właściwości”. Pojawi się okno dialogowe.
  6. Upewnij się, że użytkownik jest członkiem grupy db_owner (przeczytaj poniższe komentarze, zanim użyjesz tej ścieżki) i inne wymagane zmiany za pomocą widoku. (Użyłem tego w 2016 r. Nie jestem pewien, jak konkretne okno dialogowe wygląda w innej wersji i dlatego nie jest konkretne)

6
Uważaj, komu przypisujesz rolę bazy danych db_owner. Nie wszyscy użytkownicy powinni zostać dodani do tej roli.
— Rod

1
@Rod Jeśli przyznanie db_owner nie jest zalecane, to jaki typ dostępu jest zalecany dla aplikacji do interakcji z bazą danych?
— Jacob

1
Czy wystarczyłoby społeczeństwo?
— Rod

2
@Jacob Do zapisywania i odczytywania danych w dowolnej tabeli id ​​db_datareader i db_datawriter. db_owner daje również uprawnienia do modyfikowania definicji tabel.
— Oskar Berggren

3
To nie działa, jeśli użytkownik zaznaczył db_denydatareadelubdb_denydatawriter
— Kolob Canyon


0

Sprawdź miejsce w bazie danych. Ten błąd pojawia się, gdy miejsce jest większe w porównaniu do miejsca przydzielonego do bazy danych.


Zmień także nazwę użytkownika i hasło bazy danych
— Nilesh

0

Korzystając z SSMS, upewniłem się, że użytkownik ma uprawnienia do łączenia się zarówno z bazą danych, jak i serwerem raportów.

Na konkretnej bazie danych, której dotyczyło zapytanie, we właściwościach zamapowałem ich poświadczenia i włączyłem moduł danych i uprawnienia publiczne. Ponadto, jak powiedzieli inni - upewniłem się, że nie wybrano żadnych pól zaprzeczenia odczytu / denywrite.

Nie chciałem włączać własności bazy danych w przypadku ich raportów, ponieważ musieli mieć tylko wybrane uprawnienia.


-1

W ten sposób rozwiązuję swój problem. [WAŻNA UWAGA: umożliwia eskalację (rozszerzanie) uprawnień do określonego konta, prawdopodobnie więcej niż jest to potrzebne w przypadku indywidualnego scenariusza].

  1. Przejdź do „ Object Explorer” ” w SQL Management Studio.
  2. Rozwiń Bezpieczeństwo , a następnie Zaloguj się .
  3. Wybierz użytkownika, z którym pracujesz, a następnie kliknij prawym przyciskiem myszy i wybierz Właściwości Windows .
  4. W Wybierz stronę przejdź do ról serwera
  5. Kliknij sysadmin i zapisz.

2
Nie jestem pewien, dlaczego ta odpowiedź została odrzucona. Ta odpowiedź rozwiązała mój problem. Więc zagłosowałem za.
— Emran Hussain

9
Ta odpowiedź POWINNA zostać odrzucona, ponieważ rażąco mówi czytelnikowi, aby dał obiektowi użytkownika pełną, pełną i całkowitą kontrolę nad całym serwerem bez wyjaśniania lub ostrzegania, że ​​to właśnie robi. Opierając się na treści pytania i tej odpowiedzi, myślę, że istnieje pewne niebezpieczeństwo, że początkujący użytkownicy zastosują tę „poprawkę” bez pełnego zrozumienia.
— Oskar Berggren

3
Jest to opcja brutalnej siły, której nie należy stosować. Jeśli nie rozumiesz, co to robi, nie powinieneś tego robić.
— n8.

Wszyscy - nie róbcie tego w środowisku produkcyjnym.
— gotqn

Oczywiście nie zrobiłbym tego w wersji produkcyjnej, ale rozwiązało to mój problem (w środowisku deweloperskim). Więc zasługuje na moje uznanie. Dzięki ccassob.
— Fl4v

-2

Być może wygasła twoja subskrypcja panelu Plesk lub innej subskrypcji ... sprawdź subskrypcję Koniec.


Proszę podać więcej opisu wokół swojej odpowiedzi
— asolanki
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.