Bảo mật cho các nhà phát triển ứng dụng thực hiện công việc PL / SQL trong Oracle


13

Làm thế nào để bạn xử lý việc thiếu các đặc quyền cấp Schema trong Oracle? Kiến trúc bảo mật của Oracle hoạt động tốt cho các ứng dụng chỉ cần đặc quyền cấp đối tượng và nó hoạt động tốt cho các DBA cần ít hạn chế. Tuy nhiên, dường như có một lỗ hổng lớn trong kiến ​​trúc dành cho các lập trình viên đang phát triển với ứng dụng giao diện người dùng và PL / SQL trong nhiều lược đồ. Dưới đây là một số lựa chọn của tôi với nhược điểm của họ:

  1. Làm cho mỗi lập trình viên phát triển trong lược đồ riêng của họ. DBA sẽ cấp các đặc quyền cấp đối tượng cho các lập trình viên cần chúng. Bất kỳ sự phát triển gói phải được thực hiện bởi một DBA. Nhược điểm chính là các lập trình viên sẽ sử dụng cơ sở dữ liệu như một thùng bit để làm giảm hiệu suất của cơ sở dữ liệu. Tôi muốn các lập trình viên phát triển trong cơ sở dữ liệu, nhưng phương pháp này sẽ làm nản lòng nó rất nhiều.

  2. Cung cấp cho mỗi lập trình viên tên người dùng / mật khẩu cho hàng tá lược đồ họ cần để phát triển. Cấp quyền cho lược đồ ứng dụng này để tạo quy trình, bảng, v.v. Một số nhược điểm của phương pháp này là lập trình viên phải duy trì nhiều lần đăng nhập và hiếm khi đăng nhập như chính họ. Phát triển lược đồ chéo cũng khó khăn.

  3. Cấp cho các lập trình viên đặc quyền xác thực proxy trên mỗi lược đồ mà họ cần để phát triển. Điều này giữ cho họ đăng nhập như chính họ mà không phải cấp cho họ các đặc quyền khác ngoài đặc quyền proxy. Nhược điểm bao gồm các lập trình viên phải duy trì các kết nối riêng cho từng lược đồ mà họ ủy quyền, việc phát triển lược đồ chéo trở nên cồng kềnh hơn vì các kết nối phải liên tục thay đổi và các gói sử dụng liên kết cơ sở dữ liệu công cộng với xác thực được thông qua sẽ không được biên dịch trong các kết nối proxy.

  4. Cung cấp cho mỗi đặc quyền DBA lập trình viên. - Nhược điểm ở đây là bảo mật. Không có lập trình viên lược đồ nào có thể được giữ ngoài bất kỳ lược đồ nào và bất kỳ lập trình viên nào cũng có thể mạo danh bất kỳ lập trình viên nào khác (DBA).

Dường như có một tùy chọn còn thiếu để cấp cho mỗi lập trình viên CHỌN / CHERTN / TẠO / v.v. đặc quyền trên lược đồ mà họ cần để phát triển. Họ đăng nhập như chính họ để thực hiện công việc của họ bằng một kết nối. Các đối tượng mới trong lược đồ mà chúng có quyền truy cập ngay lập tức có sẵn.

Tui bỏ lỡ điều gì vậy? Làm thế nào để bạn xử lý các lập trình viên ứng dụng phát triển PL / SQL?


3
Câu hỏi tuyệt vời +1 - điều này, cùng với việc thiếu kiểm soát nguồn tích hợp, là một vấn đề lớn với Oracle trong môi trường đa nhà phát triển.
ScottCher

Câu trả lời:


11

Quay trở lại những ngày khi tôi làm việc trong một cửa hàng của Oracle, chúng tôi đã có một máy chủ 'dev' (phát triển) cụ thể, có các hạn chế bảo mật khác với máy chủ 'prod' (sản xuất). Các nhà phát triển có thể làm bất cứ điều gì họ cần, và sau đó chúng tôi sẽ chuyển các tập lệnh cần thiết cho DBA để áp dụng cho máy chủ sản xuất.

Trong trường hợp các hệ thống quan trọng của chúng tôi (Biểu ngữ SCT, để theo dõi các lớp học & sinh viên và Tài chính Oracle), cũng có các máy chủ 'thử nghiệm' và 'hạt giống'. Kiểm tra là để kiểm tra chấp nhận của người dùng trước khi công cụ chuyển từ dev sang prod; 'Seed' là cài đặt phần mềm của phần mềm, vì vậy chúng tôi sẽ tìm thấy một lỗi, chúng tôi có thể xác minh xem đó có phải là thứ chúng tôi đã giới thiệu hoặc đến từ phần mềm của SCT hoặc Oracle không.


+1 Với cơ sở dữ liệu sử dụng chung của chúng tôi, các nhà phát triển làm việc trên các dự án rất đa dạng, do đó, nguyên tắc đặc quyền tối thiểu sẽ không cung cấp cho họ quyền truy cập đầy đủ vào ngay cả máy chủ phát triển. ( en.wikipedia.org/wiki/Principl_of_least_priv đặc biệt )
Leigh Riffel

@Leigh - Có lẽ tôi nên làm rõ ... máy chủ dev nằm trong số những gì bạn có là số 1, không phải là số 4
Joe

1
Tôi nhớ có cơ sở dữ liệu DEV được nhân bản từ Sản xuất, sau đó các khoản trợ cấp phức tạp để cho phép các nhà phát triển làm việc mà không bị hạn chế. Cuối cùng, việc cung cấp cho mỗi nhà phát triển cơ sở dữ liệu và quyền truy cập DBA của họ dễ dàng hơn. Sau đó sẽ cung cấp các thay đổi vào Dev thông qua một chu kỳ phát hành. Bây giờ nên dễ dàng hơn với ảo hóa.
Sumnibot

@Sumnibot - Dễ dàng cài đặt bảo trì, sao lưu, v.v. một cơ sở dữ liệu riêng cho mọi nhà phát triển hơn là cấp cho họ quyền!?! Ngoài thời gian cần thiết để giữ cho mỗi bản cập nhật này có vẻ như chi phí cấp phép sẽ là đáng kể hoặc bạn không cung cấp cho họ phiên bản doanh nghiệp?
Leigh Riffel

1
Không chứa một câu trả lời cụ thể cho tôi.
Michael-O

3

Sử dụng vai trò để liên kết các bộ sưu tập các đối tượng, sau đó cấp quyền truy cập vào các vai trò

Câu lệnh GRANT cho phép DBA:

Đặc quyền đối tượng cho một đối tượng cụ thể cho người dùng, vai trò và CÔNG. Bảng 18-2 liệt kê các đặc quyền đối tượng và các hoạt động mà chúng ủy quyền.

Vì các đặc quyền đối tượng có thể được cấp cho một vai trò, nên việc cấp quyền truy cập vai trò cho tất cả các bảng trong một lược đồ là tương đối dễ dàng:

sql> spool privates.sql
sql> chọn 'cấp chọn trên scott.' | | tên_bảng | | ' vào vai trò_select; ' từ dba_tables nơi chủ sở hữu = 'SCOTT';
sql> @ privates.sql
sql> cấp vai trò_select cho john, sam, peter;

Điều này, kết hợp với GRANT CREATE TABLEvấn đề của người dùng lược đồ thích hợp với vai trò có nghĩa là các nhà phát triển có thể chọn và tạo các bảng. Nó không hoàn hảo vì một bảng được tạo yêu cầu chạy lại tập lệnh, nhưng WITH GRANT OPTIONgợi ý rằng mỗi nhà phát triển sau đó có thể cấp quyền truy cập vào bảng mà họ đã tạo cho vai trò phù hợp.

Điều này cho thấy rằng bạn có thể tạo các trình kích hoạt mức DDL có thể thực hiện quy trình cấp phù hợp, mặc dù số lượng thử nghiệm đáng kể rõ ràng là cần thiết, có thể làm cho câu lệnh tạo bảng tự động cấp quyền phù hợp cho các vai trò phù hợp.

Biên tập --

Theo GRANT , CREATE TABLEđặc quyền:

Tạo một bảng trong lược đồ của người được cấp.

Do đó, bằng cách cho họ tạo bảng, thay đổi bảng, v.v. từ người dùng chính xác, họ sẽ có thể truy cập vào lược đồ của người dùng đó như thể họ là người dùng phù hợp.


Tôi đã thấy phương pháp mà bạn tham khảo đã cố gắng mà không có nhiều thành công; tuy nhiên, tôi tin rằng bạn đúng rằng nó có thể được thực hiện với thử nghiệm rộng rãi. Vấn đề là điều này chỉ cho phép các nhà phát triển chọn quyền truy cập trên các bảng. Cấp bảng tạo trực tiếp hoặc thông qua vai trò chỉ cung cấp cho họ tạo đặc quyền bảng trên lược đồ riêng của họ. Họ vẫn không thể tạo bảng, thủ tục, gói, trình kích hoạt hoặc bất kỳ đối tượng nào khác trong bất kỳ lược đồ nào ngoại trừ chính họ, hoặc quan điểm của bạn là họ chỉ nên tạo đối tượng trong lược đồ của riêng họ ngay cả khi đang phát triển?
Leigh Riffel

@Leigh Cập nhật chi tiết.
Brian Ballsun-Stanton

Đây không phải là cách Oracle hoạt động. Hãy thử điều này: tạo người dùng u1 được xác định bởi "ThisIsMy1Password"; tạo người dùng u2 được xác định bởi "ThisIsMy1Password"; cấp dba cho u1; cấp kết nối với u2; kết nối u1 / "ThisIsMy1Password" @db; cấp bảng tạo cho u2; kết nối u2 / "ThisIsMy1Password" @db; tạo bảng u1.t1 (c1 varchar2 (10)); Bước cuối cùng thất bại với các đặc quyền không đủ.
Leigh Riffel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.