개체 'Users', 데이터베이스 'XXX', 스키마 'dbo'에 대한 SELECT 권한이 거부되었습니다.


83

SQL Server 2012에서 Azure로 데이터베이스를 이동했습니다. 사용자를 사용하고 싶지 않아 사용자 master를 만들었습니다 test. 이것은 Azure에서 데이터베이스 XXX에 대해 수행 한 작업입니다.

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

내가 확인한 결과 내가 관심있는 데이터베이스 개체는 모두 schema에 dbo있습니다. 테이블 Users은 스키마에 dbo있습니다.

내 웹 프로젝트의 연결 문자열 test은 로그인으로 사용됩니다. 다음과 같은 오류 메시지가 생성됩니다.

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

오류 메시지는 무엇을 의미하며 사용자 test가 데이터베이스 XXX에 액세스 할 수 있도록하려면 어떻게해야 합니까?


이 질문을 해주셔서 감사합니다 :)
Kamlesh

답변:


76

문제는 사용자가 권한거부하는 것 입니다. 이 오류는 생성 한 사용자에게 데이터베이스의 테이블에 액세스 할 수있는 충분한 권한이 없을 때 발생합니다. 원하는 것을 얻으려면 사용자에게 권한을 부여하십시오.

해당 데이터베이스의 테이블에 대한 SELECT, INSERT, UPDATE 및 DELETE와 같은 사용자 별 권한을 부여 합니다.


3
때로는 db 데이터 리더 / db 소유자 옵션이 누락됩니까? windowstechinfo.com/2014/09/...
Aravinda

5
'db_denydatareader'와 'db_denydatawriter'의 체크를 해제해야했는데 이것이 SaeX가 "취소"라는 의미라고 생각합니다. 감사합니다 SaeX.
AH.

@ 아. 나는 당신과 같은 문제가있어서이 질문에 대한 답을 썼습니다. 기회가된다면 확인해보세요
Kolob Canyon

당신은 생명의 은인입니다. 고마워요 :)
Kamlesh

58
  1. SQL Management Studio 열기
  2. 데이터베이스 확장
  3. "보안"폴더를 확장합니다.
  4. "사용자"를 확장합니다.
  5. 사용자 (쿼리를 수행하려는 사용자)를 마우스 오른쪽 단추로 클릭하고 Properties 합니다.
  6. 페이지 선택 Membership .
  7. 선택을 취소했는지 확인하십시오.

    db_denydatareader

    db_denydatawriter

여기에 이미지 설명 입력

당연히 사용자에게 필요한 권한 만 부여해야합니다. 쉬운 게으른 수정은 db_owner내가 가진 것처럼 확인하는 것이지만 이것이 최상의 보안 관행은 아닙니다.


4
당신은 생명의 은인입니다. 고마워요 :)
Kamlesh

1
시간을 낭비하는 인터넷 검색과 좌절의 시간을 절약했습니다!
Scott Fleming

2
우리 중 많은 사람들이 모든 권한을 얻을 것이라는 가정하에 단순히 모든 항목을 선택합니다. 그러나이 deny너무
무랄리 Murugesan

30

특정 테이블에 대한 선택 권한을 부여하는 구문 :

USE YourDB;

GRANT SELECT ON dbo.functionName TO UserName;

데이터베이스의 모든 테이블에 대한 선택 권한을 부여하려면 다음을 수행하십시오.

USE YourDB;

GRANT SELECT TO UserName;

2
처음으로이 작업을 수행했기 때문에 올바른지 확실하지 않지만 전체 데이터베이스에 대한 선택 권한을 부여하고 싶었으므로 GRANT SELECT TO UserName을 수행하고 ON 절을 생략했습니다. 효과가있었습니다.
Rich

18

이것이 제가 직면했을 때 문제를 해결할 수 있었던 방법입니다.

  1. SQL Management Studio를 시작합니다.
  2. '개체 탐색기'에서 서버 노드를 확장합니다.
  3. 데이터베이스 노드를 확장 한 다음 특정 사용자를 사용하여 액세스하려는 특정 데이터베이스를 확장합니다.
  4. 데이터베이스의 보안 노드 아래에서 사용자 노드를 확장합니다.
  5. 특정 사용자를 마우스 오른쪽 버튼으로 클릭하고 '속성'을 클릭하십시오. 대화 상자가 나타납니다.
  6. 사용자가 db_owner 그룹의 구성원인지 확인하고 (이 경로를 사용하기 전에 아래 설명을 읽으십시오)보기를 사용하여 기타 필요한 변경 사항을 확인하십시오. (나는 이것을 2016 년에 사용했습니다. 특정 대화 상자가 다른 버전에서 어떻게 보이는지 확실하지 않아서 구체적이지 않습니다)

6
db_owner 데이터베이스 역할에 누구를 입력했는지주의하십시오. 모든 사용자가 해당 역할에 추가되어야하는 것은 아닙니다.
Rod

1
@Rod db_owner 권한 부여가 권장되지 않는 경우 응용 프로그램이 데이터베이스와 상호 작용하는 데 권장되는 액세스 유형은 무엇입니까?
Jacob

1
대중이 충분할까요?
Rod

2
@Jacob 모든 테이블에서 데이터를 쓰고 읽으려면 id db_datareader 및 db_datawriter. db_owner는 테이블 정의를 수정할 수있는 권한도 제공합니다.
Oskar Berggren

3
이것은 사용자가 확인할 경우 작동하지 않습니다 db_denydatareade또는db_denydatawriter
계산법 캐년에게

0

해당 사용자에 대한 권한 부여가 필요합니다.


0

데이터베이스의 공간을 확인하십시오.이 오류는 데이터베이스에 주어진 공간에 비해 공간이 증가했을 때 발생합니다.


또한 데이터베이스 사용자 ID 및 암호 변경
Nilesh

0

SSMS를 사용하여 사용자에게 데이터베이스와 ReportServer 모두에 대한 연결 권한이 있는지 확인했습니다.

쿼리되는 특정 데이터베이스의 속성 아래에서 자격 증명을 매핑하고 데이터 리더 및 공용 권한을 활성화했습니다. 또한 다른 사람들이 언급했듯이 읽기 거부 / 쓰기 거부 상자가 선택되지 않았는지 확인했습니다.

선택 권한 만 있으면 되었기 때문에 보고서에 대해 db 소유권을 활성화하고 싶지 않았습니다.


-1

나는 이것을하는 내 문제를 해결합니다. [중요 참고 : 개별 시나리오에 필요한 것 이상으로 특정 계정에 대한 에스컬레이션 된 (확장 된) 권한을 허용합니다.]

  1. SQL Management Studio의 ' 개체 탐색기 '로 이동합니다 .
  2. 보안 , 로그인을 차례로 확장합니다 .
  3. 작업중인 사용자를 선택한 다음 마우스 오른쪽 단추를 클릭하고 속성 창을 선택 합니다. .
  4. 에서 선택 페이지 로 이동 서버 역할
  5. sysadmin을 클릭 하고 저장하십시오.

2
이 답변이 반대표를받은 이유가 확실하지 않습니다. 이 대답은 내 문제를 해결했습니다. 그래서 나는 찬성했습니다.
Emran 후세인

9
이 답변은 사용자 객체에게 이것이하는 일임을 설명하거나 경고하지 않고 전체 서버에 대한 완전하고 완전하며 완전한 제어권을 사용자에게 부여하도록 독자에게 노골적으로 지시하기 때문에 반대 투표를 받아야합니다. 질문의 문구와이 답변에 따르면 초보 사용자가 완전히 이해하지 않고이 "수정"을 적용 할 위험이 있다고 생각합니다.
Oskar Berggren

3
이것은 적용해서는 안되는 무차별 대입 옵션입니다. 이것이 무엇을하는지 이해하지 못한다면 그렇게해서는 안됩니다.
n8.

모두-프로덕션 환경에서이 작업을 수행하지 마십시오.
gotqn apr

물론 나는 그것을 prod에서하지 않을 것이지만 그것은 내 문제를 해결했습니다 (개발 환경에서). 그래서 그것은 내 찬성에 합당합니다. 감사합니다 ccassob.
Fl4v

-2

Plesk 패널 또는 기타 패널 구독이 만료되었을 수 있습니다 .... 구독 종료를 확인하십시오.


당신의 대답 주위를 좀 더 설명을 제공하십시오
asolanki
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.