Giải pháp tích hợp của Oracle cho vấn đề này không phải là mã hóa mà là kiểm soát truy cập bằng cách sử dụng Database Vault hoặc Cơ sở dữ liệu riêng ảo để ngăn DBA hoặc người dùng khác nhìn thấy dữ liệu tương ứng và Mã hóa dữ liệu minh bạch để mã hóa dữ liệu ở trạng thái còn lại (OS / tệp - mã hóa cấp độ). Điều này không chỉ ngăn DBA nhìn thấy dữ liệu mà còn không thể thay đổi hoặc xóa dữ liệu đó.
Nếu bạn vẫn muốn mã hóa các giá trị dữ liệu, thì tất cả mã hóa / giải mã và quản lý khóa phải được xử lý bên ngoài từ cơ sở dữ liệu nơi DBA sẽ không có quyền truy cập vào các khóa mã hóa. Cách hoạt động sẽ phụ thuộc vào thiết kế ứng dụng và lựa chọn (các) ngôn ngữ lập trình của bạn. Xin lưu ý rằng việc xây dựng một kiến trúc quản lý khóa và mã hóa mạnh mẽ là không một bài tập tầm thường ...
Cũng xin lưu ý rằng gói mã nguồn PL / SQL chỉ là sự xáo trộn của mã và không phải mã hóa. Nó có thể được dễ dàng đảo ngược bằng cách sử dụng bất kỳ số lượng các trang web hiện có hoặc các quy trình được lưu trữ nội bộ. Một DBA thực sự cũng sẽ có execute any procedure
đặc quyền hoặc có thể tự cấp cho mình quyền rõ ràng để thực thi bất kỳ chức năng giải mã nào và thậm chí không cần quan tâm đến khóa đó là gì (chỉ Database Vault mới có thể ngăn chặn điều này).
Việc truyền khóa cho hàm dưới dạng đầu vào thay vì nhúng nó trực tiếp vào mã cũng sẽ có vấn đề, vì DBA có thể thấy SQL của bạn theo bất kỳ cách nào. Khi được truyền qua truy vấn SQL, khóa cũng có thể được hiển thị trong báo cáo ADDM, tệp theo dõi cơ sở dữ liệu hoặc theo dõi kiểm tra.
Có không cách an toàn để xử lý mã hóa như bạn đang mô tả với PL / SQL cũng bảo vệ dữ liệu khỏi DBA.