Oracle XS_ACL Built-In Package Versions 11.2 - 21c |
---|
Security Advisory | |||||||||||||||||||||||||||||||||||||
This package is part of Oracle Database Real Application Security (RAS) and is used to create, alter, drop, and manage Access Control Lists. The documentation for this package, in the Real Application Security Administrator's and Developer's Guide was clearly written to promote the twin concepts of "Security Through Obscurity" and "Security Through Confusion". The most basic principles of documenting code such as explaining the purpose of constants and how the use of different constants affects processing do not exist. Also, the person or persons that wrote the doc while clearly fluent in the English language apparently never passed a course named "How To Make Your Writing Comprehensible" because some of the sentences rise to the level of "Why does a mouse when it spins?" From our standpoint here at DBSecWorx we are going to devote considerable energy into getting to the bottom of how to make constructive use of the package so check back from time-to-time. That said, clearly XS_ACL relates to database security and Access Control Lists so make securing this package and monitoring any usage a very high priority. |
|||||||||||||||||||||||||||||||||||||
Recommended Security Rules | |||||||||||||||||||||||||||||||||||||
NEVER
|
|||||||||||||||||||||||||||||||||||||
How Oracle Works | |||||||||||||||||||||||||||||||||||||
In the case of Real Application Security generally, and this built-in package specifically, the documentation is so confusing and inadequate that we must admit that we do not truly understand how it works and until we do we recommend not using it. We will update this monograph as we learn more and change our opinion of RAS when we not only understand how it works but are comfortable that we are aware of any weaknesses and how to defeat them. | |||||||||||||||||||||||||||||||||||||
XS_ACL Package Information | |||||||||||||||||||||||||||||||||||||
AUTHID | CURRENT_USER |
||||||||||||||||||||||||||||||||||||
Constants |
|
||||||||||||||||||||||||||||||||||||
Data Types | CREATE OR REPLACE TYPE XS$ACE_LIST AS VARRAY(1000) OF XS$ACE_TYPE; |
||||||||||||||||||||||||||||||||||||
Dependencies |
|
||||||||||||||||||||||||||||||||||||
Documented | Yes: In the Real Application Security Administrator's & Developer's Guide | ||||||||||||||||||||||||||||||||||||
Exceptions |
|
||||||||||||||||||||||||||||||||||||
First Available | 11.2 | ||||||||||||||||||||||||||||||||||||
Security Model | Owned by SYS with EXECUTE granted to PUBLIC and DBSFWUSER According to the Oracle docs, for a user to administer objects in their own schema requires the RESOURCE role. Another good reason to never grant the RESOURCE role to any user. The docs further state that the RESOURCE role and the XS_RESOURCE application role include the ADMIN_SEC_POLICY privilege but we have yet to verify this statement. The docs say this is required to administer schema objects in the schema, whatever that is supposed to mean, as well as administering the policy artifacts within the granted schema to achieve policy management within an application. Based on the preceding statement perhaps the intention is security through abuse of the English language. We will try to unravel this and write it in clear and meaningful sentences. The docs also state: "Users can administer policy enforcement on the schema if they have been granted APPLY_SEC_POLICY privilege. With this privilege, the user can administer policy enforcement within granted schemas to achieve policy management within an application. We have no idea what this means either but, again, will try to get it translated into English. |
||||||||||||||||||||||||||||||||||||
Source | {ORACLE_HOME}/rdbms/admin/xsacl.sql | ||||||||||||||||||||||||||||||||||||
Subprograms | |||||||||||||||||||||||||||||||||||||
ADD_ACL_PARAMETER | |||||||||||||||||||||||||||||||||||||
Add a numeric parameter value Overload 1 |
xs_acl.add_acl_parameter( |
||||||||||||||||||||||||||||||||||||
TBD | |||||||||||||||||||||||||||||||||||||
Add a string parameter value Overload 2 |
xs_acl.add_acl_parameter( |
||||||||||||||||||||||||||||||||||||
exec xs_acl.add_acl_parameter('DBSECWORXACL','XPOLICY','GEO', 'EMEA'); |
|||||||||||||||||||||||||||||||||||||
APPEND_ACES | |||||||||||||||||||||||||||||||||||||
Append one ACE to the ACL Overload 1 |
xs_acl.append_aces( |
||||||||||||||||||||||||||||||||||||
DECLARE |
|||||||||||||||||||||||||||||||||||||
Append ACEs to the ACL Overload 2 |
xs_acl.append_aces( |
||||||||||||||||||||||||||||||||||||
TBD | |||||||||||||||||||||||||||||||||||||
CREATE_ACL | |||||||||||||||||||||||||||||||||||||
Create an Access Control List | xs_acl.create_acl( |
||||||||||||||||||||||||||||||||||||
col acl format a45 |
|||||||||||||||||||||||||||||||||||||
DELETE_ACL | |||||||||||||||||||||||||||||||||||||
Delete an ACL | xs_acl.delete_acl( |
||||||||||||||||||||||||||||||||||||
exec xs_acl.delete_acl('DBSECWORXACL'); |
|||||||||||||||||||||||||||||||||||||
GRANT_PRIVILEGE (new 21c) | |||||||||||||||||||||||||||||||||||||
Grant a privilege | xs_acl.grant_privilege( |
||||||||||||||||||||||||||||||||||||
TBD | |||||||||||||||||||||||||||||||||||||
REMOVE_ACES | |||||||||||||||||||||||||||||||||||||
Remove all ACEs from the ACL | xs_acl.remove_aces(acl IN VARCHAR2); |
||||||||||||||||||||||||||||||||||||
exec xs_acl.remove_aces('DBSECWORXACL'); |
|||||||||||||||||||||||||||||||||||||
REMOVE_ACL_PARAMETERS | |||||||||||||||||||||||||||||||||||||
Remove all parameters Overload 1 |
xs_acl.remove_acl_parameters(acl IN VARCHAR2); |
||||||||||||||||||||||||||||||||||||
exec xs_acl.remove_acl_parameters('DBSECWORXACL'); |
|||||||||||||||||||||||||||||||||||||
Remove a single parameter Overload 2 |
xs_acl.remove_acl_parameters( |
||||||||||||||||||||||||||||||||||||
exec xs_acl.remove_acl_parameters('DBSECWORXACL', 'GEO'); |
|||||||||||||||||||||||||||||||||||||
Remove a policy associated parameter Overload 3 |
xs_acl.remove_acl_parameters( |
||||||||||||||||||||||||||||||||||||
exec xs_acl.remove_acl_parameters('DBSECWORXACL', 'XPOLICY', 'GEO'); |
|||||||||||||||||||||||||||||||||||||
REVOKE_PRIVILEGE (new 21c) | |||||||||||||||||||||||||||||||||||||
Revoke a granted privilege | xs_acl.revoke_privilege( |
||||||||||||||||||||||||||||||||||||
TBD | |||||||||||||||||||||||||||||||||||||
SET_DESCRIPTION | |||||||||||||||||||||||||||||||||||||
Set an ACL description | xs_acl.set_description( |
||||||||||||||||||||||||||||||||||||
exec xs_acl.set_description('DBSECWORXACL', 'DBSecWorx Secure ACL'); |
|||||||||||||||||||||||||||||||||||||
SET_PARENT_ACL | |||||||||||||||||||||||||||||||||||||
Sets the parent ACL | xs_acl.set_parent_acl( |
||||||||||||||||||||||||||||||||||||
exec xs_acl.set_parent_acl('DSECWORXACL','SYSTEMACL', xs_acl.extended); |
|||||||||||||||||||||||||||||||||||||
SET_SECURITY_CLASS | |||||||||||||||||||||||||||||||||||||
Sets the security class | xs_acl.set_security_class( |
||||||||||||||||||||||||||||||||||||
col acl format a45 |
Related Topics |
DBMS_NETWORK_ACL_ADMIN |
DBMS_NETWORK_ACL_UTILITY |
DBMS_SFW_ACL_ADMIN |
XS_ACL_INT |
XS_ADMIN_INT |
XS_ADMIN_UTIL |
XS_ADMIN_UTIL_INT |
XS_PRINCIPAL |