programing

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

starjava 2023. 4. 7. 20:47
반응형

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

함수를 실행하는 데 문제가 있습니다.

제가 한 일은 다음과 같습니다.

  1. SQL Server Management Studio를 사용하여 함수를 만듭니다.정상적으로 작성되었습니다.
  2. 그런 다음 새로 만든 기능을 실행해 봤더니 다음과 같은 결과가 나왔습니다.

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

해당 저장 프로시저에 대해 사용자(또는 사용자가 속한 그룹)에게 실행 권한을 부여해야 할 것 같습니다.

를 들어 다음과 같이 접근을 허용할 수 있습니다.

USE zzzzzzz;
GRANT EXEC ON dbo.xxxxxxx TO PUBLIC

제가 찾은 최선의 해결책은 새로운 데이터베이스 역할을 만드는 것입니다.

CREATE ROLE db_executor;

그 역할의 Exec 권한을 부여합니다.

GRANT EXECUTE TO db_executor;

사용자 속성으로 이동하여 사용자 매핑으로 이동하여 새 역할을 추가한 데이터베이스를 선택하면 데이터베이스 역할 구성원 섹션에 새 역할이 표시됩니다.

자세한 내용은 기사 전문을 참조하십시오.

Studio에서 SQL Server Management Studio로 합니다.security->schema->dbo:

여기에 이미지 설명 입력

dbo를 두 번 클릭하고 Permissions 페이지를 선택한 다음 파란색으로 표시된 "View database permissions" 링크를 클릭합니다.

여기에 이미지 설명 입력

권한을 변경할 사용자를 선택하고 "명시적" 탭에서 "실행" 권한을 찾습니다.

여기에 이미지 설명 입력

적절한 상자를 선택하여 적절한 권한을 선택합니다.

이런 걸 해야 해

GRANT Execute ON [dbo].fnc_whatEver TO [domain\user]

사용자 또는 역할에 권한을 부여하려는 경우 이 기능이 작동합니다.

Microsoft SQL Server Management Studio 사용:

  1. 이동처: 데이터베이스
  2. dbo.my_http://dbo.my 를 오른쪽 클릭합니다.
  3. 선택: 속성
  4. 왼쪽 패널에서 사용 권한을 클릭합니다.
  5. 이름 패널에서 사용자 또는 역할 선택
  6. 권한에서 실행 및 체크 표시를 찾습니다(Grant, With Grant 또는 Deny).

특히 웹 응용 프로그램에서 동일한 사용자 이름을 사용하는 경우 이러한 권한을 부여하는 것은 위험할 수 있습니다.

이제 웹 사용자(및 전 세계 웹)도 데이터베이스 내에 개체를 만들고 삭제할 수 있는 권한을 가집니다.SQL Injection을 생각해 보세요!

다음과 같이 지정된 개체의 특정 사용자에게만 Execute 권한을 부여할 것을 권장합니다.

grant execute on storedProcedureNameNoquotes to myusernameNoquotes

이제 myusernameNoquotes 사용자는 중요한 데이터에 대한 다른 불필요한 권한 없이 storedProcedureNameNoquotes 프로시저를 실행할 수 있습니다.

생성할 수 있는 충분한 권한이 있지만 실행할 수 있는 권한이 없습니다.

자세한 내용은 GRANT Object Permissions(Transact-SQL)참조하십시오.

솔루션 실행 시 발생하는 예외에 대해 위의 질문(ask ask)과 같은 문제가 있는 경우 문제는 권한이며 해당 그룹의 사용자에게 데이터베이스/스토어드 프로시저에 액세스할 수 있는 권한이 제대로 부여되지 않았습니다.당신이 해야 할 일은 내가 가지고 있는 것을 당신의 데이터베이스 이름, 저장 프로시저(기능), 권한이나 역할의 종류 또는 당신이 접근 권한을 부여하는 사람과 같은 것을 하는 것입니다.

USE [StableEmployee]
GO
GRANT EXEC ON dbo.GetAllEmployees TO PUBLIC

/***** 오브젝트:Stored Procedure [dbo] 。[Get All Employees] 스크립트 날짜: 2016년 1월 27일 16:27:27 ****/

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[GetAllEmployees]
as
Begin
Select EmployeeId, Name, Gender, City, DepartmentId
From tblEmployee

End

공개되지 않은 한 명의 사용자에게 권한을 부여하는 방법은 다음과 같습니다.

직접 쿼리:

Use MyDatabase Grant execute on [dbo].[My-procedures-name] to [IIS APPPOOL\my-iis-pool] Go

이 사용자를 특정 데이터베이스에 대해 특별히 지정한 경우 속성의 "사용자 매핑"에서 db_owner로 설정하지 않을 수 있습니다.

모든 사용자에게 실행 권한을 부여할 수 있습니다.

GRANT Execute on [dbo].your_object to [public]

"Public"은 모든 사용자가 구성원인 기본 데이터베이스 역할입니다.

일반적인 대답은 위와 같이 실행 권한을 부여하는 것입니다.그러나 SP의 스키마 소유자가 기본 개체와 다르면 이 기능이 작동하지 않습니다.

스키마 소유자 확인 기준:

select name, USER_NAME(s.principal_id) AS Schema_Owner from sys.schemas s

스키마의 소유자를 변경하려면 다음 작업을 수행합니다.

ALTER AUTHORIZATION ON SCHEMA::YOUR_SCHEMA TO YOUR_USER;

예:

ALTER AUTHORIZATION ON SCHEMA::Claim TO dbo
ALTER AUTHORIZATION ON SCHEMA::datix TO user1;

마지막으로 SP 내에서 테이블을 잘라내거나 구조를 변경하는 경우 SP에 EXECUTE AS OWNER로 추가할 수 있습니다.

ALTER procedure [myProcedure] 
WITH EXECUTE AS OWNER

as

truncate table etl.temp

단일 기능만 부여하면 되는 경우(db 관리자만 허용):

  1. 오픈 매니지먼트 스튜디오
  2. 오브젝트 Eplor에서 부여할 함수/프로시저를 찾습니다(dbname-Programmability-[Functions/Stored Procedures]-...).
  3. 기능 또는 절차 이름을 마우스 오른쪽 버튼으로 클릭하고 속성을 엽니다.
  4. 속성에서 권한을 선택하고 원하는 사용자(또는 스키마)를 추가한 다음 실행 권한을 부여합니다.

이 기능은 사용자에게만 실행 권한을 부여하기 때문에 가장 안전한 방법이라고 생각합니다.다른 건 없어!

액세스 권한을 부여할 개체를 선택한 다음 마우스 오른쪽 버튼을 클릭하고 속성을 선택해야 합니다.표시되는 모달 창에서 권한을 선택하고 검색을 클릭한 다음 새로 표시된 창에서 찾아보기를 선택하고 액세스를 허용할 사용자를 선택한 다음 확인을 클릭합니다.허가 목록과 허가 상태가 표시됩니다.그 후, 허가 또는 거부를 선택할 수 있습니다.

저도 같은 문제에 직면하여 데이터베이스 사용자에게 db_owner 권한을 부여하여 해결했습니다.

지정된 데이터베이스 테이블에서 작업을 수행할 수 있는 권한이 없음을 나타냅니다.이를 활성화하려면 보안 -> 스키마로 이동하여 확인합니다.

보안 권한을 위해 설계된 서버 역할을 수정하는 것이 좋습니다.sysadmin 서버 역할을 사용자에게 추가합니다.보안을 강화하기 위해 사용자 정의 서버 역할을 사용할 수 있습니다.하지만 이 접근방식을 통해 현재 원하는 것을 얻을 수 있습니다.

  1. 오브젝트 탐색기 -> 서버 -> 보안 -> 로그인
  2. 원하는 사용자를 오른쪽 클릭합니다.
  3. 왼쪽에 있는 서버 역할로 이동
  4. sysadmin이 켜져 있는지 확인합니다.
  5. [확인]을 눌러 SQL Server를 클릭합니다.

행운을 빌어요

여기에 이미지 설명 입력

언급URL : https://stackoverflow.com/questions/3708348/the-execute-permission-was-denied-on-the-object-xxxxxxx-database-zzzzzzz-s

반응형