PL / SQL 작업을 수행하는 애플리케이션 개발자를위한 보안


13

Oracle의 스키마 수준 권한 부족을 어떻게 처리합니까? Oracle의 보안 아키텍처는 객체 수준 권한 만 필요한 응용 프로그램에 적합하며 제한이 거의없는 DBA에 적합합니다. 그러나, 다중 스키마에서 프론트 엔드 애플리케이션과 PL / SQL로 개발하는 프로그래머에게는 아키텍처에 큰 차이가있는 것 같습니다. 단점이있는 옵션 중 일부는 다음과 같습니다.

  1. 각 프로그래머가 자신의 스키마로 개발하도록하십시오. DBA는 필요한 프로그래머에게 오브젝트 레벨 권한을 부여합니다. 모든 패키지 개발은 DBA가 수행해야합니다. 주요 단점은 프로그래머가 데이터베이스 성능을 저하시키기 위해 비트 버킷처럼 데이터베이스를 사용한다는 것입니다. 프로그래머가 데이터베이스에서 개발하기를 원하지만이 방법은 데이터베이스를 크게 권장하지 않습니다.

  2. 각 프로그래머에게 개발에 필요한 12 가지 정도의 스키마에 대한 사용자 이름 / 비밀번호를 부여하십시오.이 응용 프로그램 스키마에 프로 시저, 테이블 등을 작성할 수있는 권한을 부여하십시오.이 방법의 단점 중 일부는 프로그래머가 여러 로그인을 유지 보수해야한다는 것입니다. 그들 자신으로 거의 로그인하지 않았습니다. 크로스 스키마 개발도 어렵습니다.

  3. 프로그래머에게 개발에 필요한 각 스키마에 대한 프록시 인증 권한을 부여하십시오. 이렇게하면 프록시 권한 이외의 권한을 부여 할 필요없이 스스로 로그인 상태를 유지할 수 있습니다. 단점은 프록시를 위해 각 스키마에 대해 별도의 연결을 유지해야하는 프로그래머, 연결이 지속적으로 변경되어야하므로 크로스 스키마 개발이 더 번거롭고 인증이 통과 된 공용 데이터베이스 링크를 사용하는 패키지는 프록시 연결 내부에서 컴파일되지 않습니다.

  4. 각 프로그래머에게 DBA 권한을 부여하십시오. – 단점은 보안입니다. 스키마 프로그래머를 스키마에서 제외시킬 수 없으며 프로그래머는 다른 프로그래머 (DBA)를 가장 할 수 있습니다.

각 프로그래머에게 SELECT / INSERT / CREATE / etc를 부여하는 옵션이없는 것 같습니다. 개발에 필요한 스키마에 대한 권한. 하나의 연결을 사용하여 작업을 수행하기 위해 스스로 로그인합니다. 액세스 할 수있는 스키마의 새 개체를 즉시 사용할 수 있습니다.

뭔가 빠졌습니까? PL / SQL 개발을 수행하는 응용 프로그램 프로그래머를 어떻게 처리합니까?


3
+1 좋은 질문-통합 소스 제어의 부족과 함께 이것은 다중 개발자 환경에서 Oracle의 주요 문제입니다.
ScottCher

답변:


11

내가 오라클 샵에서 일하던 시절에는 특정 'dev'(개발) 서버가 있었는데 'prod'(생산) 서버와는 다른 보안 제한이있었습니다. 개발자는 필요한 모든 작업을 수행 한 다음 프로덕션 서버에 적용하기 위해 필요한 스크립트를 DBA에 전달했습니다.

중요한 시스템 (SCT 배너, 수업 및 학생 추적, Oracle Financials)의 경우 '테스트'및 '시드'서버도있었습니다. 테스트는 제품이 개발자에서 제품으로 마이그레이션되기 전에 사용자 승인 테스트를위한 것입니다. 'seed'는 소프트웨어의 재고 설치이므로 버그를 발견하면 SCT 또는 Oracle의 소프트웨어에서 소개되었거나 버그인지 확인할 수 있습니다.


+1 일반적인 사용 데이터베이스를 통해 개발자는 매우 다양한 프로젝트를 수행하므로 최소 권한의 원칙으로 인해 개발 서버까지도 완전히 액세스 할 수 없습니다. ( en.wikipedia.org/wiki/Principle_of_least_privilege )
Leigh Riffel

@Leigh-아마도 분명히 했어야 할 것입니다 ... dev 서버는 # 4가 아닌 # 1이었던 것 아래에 떨어졌습니다
Joe

1
프로덕션에서 DEV 데이터베이스를 복제 한 다음 개발자가 제한없이 작업 할 수 있도록 복잡한 부여를 기억합니다. 결국 각 개발자에게 고유 한 데이터베이스 및 DBA ​​액세스 권한을 부여하는 것이 더 쉬웠습니다. 그런 다음 릴리스주기를 통해 변경 사항을 Dev에 공급합니다. 가상화로 이제 더 쉬워야합니다.
Sumnibot

@Sumnibot-개발자에게 권한을 부여하는 것보다 모든 개발자를 위해 별도의 데이터베이스를 유지 관리, 백업 등으로 쉽게 설치할 수 있습니다!?! 이들 각각을 최신 상태로 유지하는 데 필요한 시간 외에도 라이센스 비용이 상당하거나 엔터프라이즈 버전을 제공하지 않은 것처럼 보입니까?
레이 리펠

1
나에게 확실한 대답이 없습니다.
Michael-O

3

역할을 사용하여 개체 컬렉션을 연결 한 다음 역할에 대한 액세스 권한을 부여합니다

GRANT의 문은 DBA에 수 있습니다 :

사용자, 역할 및 PUBLIC에 대한 특정 개체에 대한 개체 권한. 표 18-2에는 개체 권한 및 권한이 부여 된 작업이 나와 있습니다.

역할에 개체 권한을 부여 할 수 있으므로 스키마의 모든 테이블에 역할 액세스 권한을 부여하는 것이 상대적으로 쉽습니다.

sql> 스풀 privs.sql
sql> select 'scott의 부여 선택.'|| table_name || ' role_select; ' dba_tables에서 owner = 'SCOTT';
sql> @ privs.sql
sql> john, sam, peter에게 role_select 부여

이는 GRANT CREATE TABLE적절한 스키마 사용자 가 발행 한 역할 과 결합하여 개발자가 테이블을 선택하고 작성할 수 있음을 의미합니다. 그것은 아니에요 완벽하게 작성된 테이블이 다시 실행되는 스크립트를 필요로하지만 같이 WITH GRANT OPTION각 개발자는 그 때 적절한 역할에 만든 테이블에 대한 액세스 권한을 부여 할 수 있음을 시사한다.

따라서 적절한 권한 부여 프로세스를 실행할 수있는 DDL 수준 트리거를 만들 수 있지만 상당한 양의 테스트가 필요하지만 create table 문이 자동으로 적절한 역할에 적절한 권한을 부여 할 수 있어야합니다.

편집하다 --

에 따르면 GRANTCREATE TABLE특권 :

피부 여자의 스키마에 테이블을 만듭니다.

따라서 올바른 사용자 로부터 테이블 작성, 테이블 변경 등 을 제공하면 해당 사용자의 스키마를 해당 사용자 인 것처럼 액세스 할 수 있어야합니다.


나는 당신이 참조한 방법론이 큰 성공을 거두지 않은 것을 보았다. 그러나 광범위한 테스트로 수행 할 수 있다고 생각합니다. 문제는 개발자가 테이블에 대한 액세스 만 선택할 수 있다는 것입니다. 직접 또는 역할을 통해 테이블 ​​작성 권한을 부여하면 자신의 스키마에 대한 테이블 권한 만 작성합니다. 그들은 여전히 ​​자신의 것을 제외하고 스키마에서 테이블, 프로 시저, 패키지, 트리거 또는 다른 객체를 만들 수 없거나 개발 중에도 자신의 스키마에서만 객체를 만들어야한다는 요점입니까?
레이 리펠

@Leigh 세부 사항으로 업데이트되었습니다.
Brian Ballsun-Stanton

이것은 단지 오라클이 작동하는 방식이 아닙니다. 이것을 시도하십시오 : "ThisIsMy1Password"로 식별되는 사용자 u1을 작성하십시오. "ThisIsMy1Password"로 식별되는 사용자 u2를 작성하십시오. db1을 u1에 부여; u2에 연결 부여; u1 / "ThisIsMy1Password"@db 연결; u2에 테이블 작성 권한 부여; u2 / "ThisIsMy1Password"@db 연결; 테이블 u1.t1 생성 (c1 varchar2 (10)); 권한이 충분하지 않으면 마지막 단계가 실패합니다.
레이 리펠
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.