저는 dba가 아닌 프로그래머입니다 ... 나는 위험 할 정도로 충분히 알고 있습니다.
데이터베이스의 db_owner 인 레거시 사용자로 데이터베이스를 상속했습니다. 비즈니스상의 이유로 기존 테이블, 스키마 등에 대한이 사용자의 권한을 조정할 수는 없지만 일부 새 테이블이 작성되고 있으며이 사용자에게만 SELECT 액세스 권한을 갖기를 원합니다.
GRANT로 설정된 SELECT를 제외한 모든 것이 거부되도록이 테이블에 대해이 사용자에 대한 권한이 설정되었습니다.
그러나이 사용자 (dbadmin)가이 테이블 중 하나 (AccountingAudit)에서 SELECT를 수행하려고하면이 오류가 발생합니다.
The SELECT permission was denied on the object 'AccountingAudit', database 'billing', schema 'dbo'.
이 SQL을 실행 하여이 테이블 / 사용자에 대해 어떤 권한이 설정되어 있는지 확인하십시오.
select object_name(major_id) as object,
user_name(grantee_principal_id) as grantee,
user_name(grantor_principal_id) as grantor,
permission_name,
state_desc
from sys.database_permissions
그리고 이것은 내가 다시 얻는 것입니다.
AccountingAudit dbadmin dbo ALTER DENY
AccountingAudit dbadmin dbo CONTROL DENY
AccountingAudit dbadmin dbo DELETE DENY
AccountingAudit dbadmin dbo INSERT DENY
AccountingAudit dbadmin dbo REFERENCES DENY
AccountingAudit dbadmin dbo SELECT GRANT
AccountingAudit dbadmin dbo TAKE OWNERSHIP DENY
AccountingAudit dbadmin dbo UPDATE DENY
AccountingAudit dbadmin dbo VIEW DEFINITION DENY
AccountingAudit dbadmin dbo VIEW CHANGE TRACKING DENY
제대로 작동하는 것 같습니다.
내가 만들고있는 SELECT 호출은 SSMS 내에서 매우 기본적인 SELECT * FROM AccountingAudit입니다. 나는 특별한 sp_executesql이나 그와 비슷한 것을하고 있지 않습니다.
명시 적으로 권한 부여를 시도했습니다.
GRANT SELECT ON [dbo].AccountingAudit TO dbadmin
이것은 효과가 없습니다 (왜 위의 쿼리는 이미 부여되었음을 보여줍니다! ;-)
stackoverflow.com 및 다른 곳을 검색했지만 아직 시도하지 않은 것을 찾을 수 없습니다. 스키마 설정 방법과 관련이 있는지 궁금합니다. (이 시점에서 나는 스키마에 대해 거의 알지 못한다.)
어떤 아이디어? 감사!