저장 프로시저의 보안 및 권한 - Amazon Redshift

저장 프로시저의 보안 및 권한

이 주제에서는 저장 프로시저를 만들고 실행하는 데 필요한 데이터베이스 자격 증명에 대해 설명합니다.

기본적으로 모든 사용자는 프로시저를 생성할 권한이 있습니다. 프로시저를 생성하려면 언어 PL/pgSQL에 대한 USAGE 권한이 있어야 하며, 이 권한은 기본적으로 PUBLIC에 부여됩니다. 기본적으로 수퍼유저 및 소유자만 프로시저를 호출할 권한이 있습니다. 수퍼유저는 사용자가 저장 프로시저를 생성하지 못하도록 사용자의 PL/pgSQL에서 REVOKE USAGE를 실행할 수 있습니다.

프로시저를 호출하려면 프로시저에 대한 EXECUTE 권한을 부여받아야 합니다. 기본적으로 새 프로시저에 대한 EXECUTE 권한은 프로시저 소유자 및 수퍼유저에게 부여됩니다. 자세한 내용은 GRANT 단원을 참조하십시오.

기본적으로 프로시저를 생성하는 사용자가 소유자입니다. 소유자는 기본적으로 해당 프로시저에 대한 CREATE, DROP, EXECUTE 권한이 있습니다. 수퍼유저는 모든 권한을 갖습니다.

SECURITY 속성은 데이터베이스 객체에 액세스할 프로시저의 권한을 제어합니다. 저장 프로시저를 생성할 때 SECURITY 속성을 DEFINER 또는 INVOKER로 설정할 수 있습니다. SECURITY INVOKER를 지정하는 경우, 프로시저는 프로시저를 호출하는 사용자의 권한을 사용합니다. SECURITY DEFINER를 지정하는 경우, 프로시저는 프로시저 소유자의 권한을 사용합니다. INVOKER가 기본값입니다.

SECURITY DEFINER 프로시저는 이를 소유한 사용자의 권한으로 실행되므로, 프로시저가 잘못 사용되지 않도록 주의하세요. SECURITY DEFINER 프로시저가 잘못 사용되지 되지 않도록 하려면 다음을 수행합니다.

  • PUBLIC이 아니라 특정 사용자에게 SECURITY DEFINER 프로시저에 대한 EXECUTE를 부여합니다.

  • 프로시저가 스키마 이름을 사용하여 액세스해야 하는 모든 데이터베이스 객체를 한정합니다. 예를 들어 단순히 mytable 대신 myschema.mytable을 사용합니다.

  • 객체 이름을 스키마로 한정할 수 없는 경우, SET 옵션을 사용하여 프로시저를 생성할 때 search_path를 설정합니다. search_path를 설정하여 신뢰할 수 없는 사용자가 작성할 수 있는 스키마를 제외합니다. 그러면 이 프로시저의 호출자가 프로시저에서 사용할 객체를 마스킹하는 객체(예: 테이블 또는 뷰)를 생성하지 못하게 할 수 있습니다. SET 옵션에 대한 자세한 내용은 CREATE PROCEDURE 섹션을 참조하세요.

다음 예제에서는 search_pathadmin으로 설정하여 user_creds 테이블이 admin 스키마에서 액세스되고 퍼블릭 또는 호출자의 search_path에 있는 다른 스키마에서 액세스하지 못하게 합니다.

CREATE OR REPLACE PROCEDURE sp_get_credentials(userid int, o_creds OUT varchar) AS $$ BEGIN SELECT creds INTO o_creds FROM user_creds WHERE user_id = $1; END; $$ LANGUAGE plpgsql SECURITY DEFINER -- Set a secure search_path SET search_path = admin;