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?

Stary dziwak
źródło
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.

Rahul Tripathi
źródło
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.

Kolob Canyon
źródło
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;
John Hayhow
źródło
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)
Pramod BR
źródło
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

Konieczne jest udzielenie uprawnień temu użytkownikowi

billah77
źródło
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.

Nilesh
źródło
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.

Aloha480
źródło
-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.
ccassob
źródło
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.

Abhendra Tiwari
źródło
Proszę podać więcej opisu wokół swojej odpowiedzi
asolanki