Oracle DBMS_XMLQUERY Built-In Package Versions 9.2 - 19.3 |
---|
Security Advisory | ||||||||||||||||||||||||||||||||||||||||||||||
Provides database-to-XMLType functionality. Whenever possible, Oracle recommends the use of DBMS_XMLGEN, a built-in package in C, instead of this package.
This package is deprecated as of 18.1 in favor of DBMS_XMLGEN but is still in the released product. Unfortunately, once again, Oracle has granted execute to PUBLIC in a package where exploits have been publicly demonstrated. |
||||||||||||||||||||||||||||||||||||||||||||||
Recommended Security Rules | ||||||||||||||||||||||||||||||||||||||||||||||
NEVER
|
||||||||||||||||||||||||||||||||||||||||||||||
How Oracle Works | ||||||||||||||||||||||||||||||||||||||||||||||
David Lichfield first revealed issues with this package at Defcon 2011 The code at right is copied a Red Database security presentation from that same year but formatted for easy readability. |
SELECT dbms_xmlquery.newcontext( |
|||||||||||||||||||||||||||||||||||||||||||||
AUTHID | CURRENT_USER |
|||||||||||||||||||||||||||||||||||||||||||||
Constants |
|
|||||||||||||||||||||||||||||||||||||||||||||
Data Types | SUBTYPE ctxType IS NUMBER; /* context type */ |
|||||||||||||||||||||||||||||||||||||||||||||
Dependencies |
|
|||||||||||||||||||||||||||||||||||||||||||||
Documented | Yes | |||||||||||||||||||||||||||||||||||||||||||||
Exceptions |
|
|||||||||||||||||||||||||||||||||||||||||||||
First Available | Not known but believed to be 9.2.0.1 | |||||||||||||||||||||||||||||||||||||||||||||
Security Model | Owned by SYS with EXECUTE granted to PUBLIC | |||||||||||||||||||||||||||||||||||||||||||||
Source | {ORACLE_HOME}/rdbms/admin/dbmsxsu.sql | |||||||||||||||||||||||||||||||||||||||||||||
Subprograms |
|
|||||||||||||||||||||||||||||||||||||||||||||
CLEARBINDVALUES | ||||||||||||||||||||||||||||||||||||||||||||||
Undocumented | dbms_xmlquery.clearBindValues(ctxHdl IN ctxType); |
|||||||||||||||||||||||||||||||||||||||||||||
See Demo Below | ||||||||||||||||||||||||||||||||||||||||||||||
CLOSECONTEXT | ||||||||||||||||||||||||||||||||||||||||||||||
Closes or deallocates a particular query context | dbms_xmlquery.closeContext(ctxHdl IN ctxType); |
|||||||||||||||||||||||||||||||||||||||||||||
See Demo Below | ||||||||||||||||||||||||||||||||||||||||||||||
GETDTD | ||||||||||||||||||||||||||||||||||||||||||||||
Generates the DTD Overload 1 |
dbms_xmlquery.getDTD( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
Overload 2 | dbms_xmlquery.getDTD( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
GETEXCEPTIONCONTENT | ||||||||||||||||||||||||||||||||||||||||||||||
Returns the thrown exception's error code and error message | dbms_xmlquery.getExceptionContent( |
|||||||||||||||||||||||||||||||||||||||||||||
DECLARE |
||||||||||||||||||||||||||||||||||||||||||||||
GETNUMROWSPROCESSED | ||||||||||||||||||||||||||||||||||||||||||||||
Returns the number of rows processed for the query | dbms_xmlquery.getNumRowsProcessed(ctxHdl IN ctxType) RETURN NUMBER; |
|||||||||||||||||||||||||||||||||||||||||||||
DECLARE |
||||||||||||||||||||||||||||||||||||||||||||||
GETVERSION | ||||||||||||||||||||||||||||||||||||||||||||||
Prints the version of the XSU in use | dbms_xmlquery.getVersion; |
|||||||||||||||||||||||||||||||||||||||||||||
set serveroutput on |
||||||||||||||||||||||||||||||||||||||||||||||
GETXML | ||||||||||||||||||||||||||||||||||||||||||||||
Generates the XML document Overload 1 |
dbms_xmlquery.getXML( |
|||||||||||||||||||||||||||||||||||||||||||||
See Demo Below | ||||||||||||||||||||||||||||||||||||||||||||||
Overload 2 | dbms_xmlquery.getXML( |
|||||||||||||||||||||||||||||||||||||||||||||
See Demo Below | ||||||||||||||||||||||||||||||||||||||||||||||
Overload 3 | dbms_xmlquery.getXML( |
|||||||||||||||||||||||||||||||||||||||||||||
See Demo Below | ||||||||||||||||||||||||||||||||||||||||||||||
Overload 4 | dbms_xmlquery.getXML( |
|||||||||||||||||||||||||||||||||||||||||||||
See Demo Below | ||||||||||||||||||||||||||||||||||||||||||||||
NEWCONTEXT | ||||||||||||||||||||||||||||||||||||||||||||||
Creates a query context and returns the context handle Overload 1 |
dbms_xmlquery.newContext(sqlQuery IN VARCHAR2) RETURN ctxType; |
|||||||||||||||||||||||||||||||||||||||||||||
DECLARE |
||||||||||||||||||||||||||||||||||||||||||||||
Overload 2 | dbms_xmlquery.newContext(sqlQuery IN CLOB) RETURN ctxType; |
|||||||||||||||||||||||||||||||||||||||||||||
DECLARE |
||||||||||||||||||||||||||||||||||||||||||||||
PROPAGATEORIGINALEXCEPTION | ||||||||||||||||||||||||||||||||||||||||||||||
Tells the XSU that if an exception is raised it should throw the exception rather then, wrap it with an OracleXMLSQLException | dbms_xmlquery.propagateOriginalException( |
|||||||||||||||||||||||||||||||||||||||||||||
DECLARE |
||||||||||||||||||||||||||||||||||||||||||||||
P_GETDTD | ||||||||||||||||||||||||||||||||||||||||||||||
ORA-600 [kgmexchi11] Bug Workaround | dbms_xmlquery.p_getDTD( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
P_GETXML | ||||||||||||||||||||||||||||||||||||||||||||||
ORA-600 [kgmexchi11] Bug Workaround | dbms_xmlquery.p_getXML( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
P_PROPORIGEXC | ||||||||||||||||||||||||||||||||||||||||||||||
ORA-600 [kgmexchi11] Bug Workaround | dbms_xmlquery.p_propOrigExc( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
P_SETDATAHEADER | ||||||||||||||||||||||||||||||||||||||||||||||
ORA-600 [kgmexchi11] Bug Workaround | dbms_xmlquery.p_setDataHeader( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
P_SETENCODINGTAG | ||||||||||||||||||||||||||||||||||||||||||||||
ORA-600 [kgmexchi11] Bug Workaround | dbms_xmlquery.p_setEncodingTag( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
P_SETMETAHEADER | ||||||||||||||||||||||||||||||||||||||||||||||
ORA-600 [kgmexchi11] Bug Workaround | dbms_xmlquery.p_setMetaHeader( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
P_SETRAISEEXCEPTION | ||||||||||||||||||||||||||||||||||||||||||||||
ORA-600 [kgmexchi11] Bug Workaround | dbms_xmlquery.p_setRaiseException( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
P_SETRAISENOROWSEXC | ||||||||||||||||||||||||||||||||||||||||||||||
ORA-600 [kgmexchi11] Bug Workaround | dbms_xmlquery.p_setRaiseNoRowsExc( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
P_SETSQLTOXMLNAMEESC | ||||||||||||||||||||||||||||||||||||||||||||||
ORA-600 [kgmexchi11] Bug Workaround | dbms_xmlquery.p_setSQLToXMLNameEsc( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
P_SETSTRICTLEGALXMLCHARCHECK | ||||||||||||||||||||||||||||||||||||||||||||||
ORA-600 [kgmexchi11] Bug Workaround | dbms_xmlquery.p_setStrictLegalXMLCharCheck( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
P_SETSTYLESHEETHEADER | ||||||||||||||||||||||||||||||||||||||||||||||
ORA-600 [kgmexchi11] Bug Workaround | dbms_xmlquery.p_setStylesheetHeader( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
P_SETXSLT | ||||||||||||||||||||||||||||||||||||||||||||||
ORA-600 [kgmexchi11] Bug Workaround Overload 1 |
dbms_xmlquery.p_setXSLT( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
Overload 2 | dbms_xmlquery.p_setXSLT( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
P_USENULLATTRIND | ||||||||||||||||||||||||||||||||||||||||||||||
ORA-600 [kgmexchi11] Bug Workaround | dbms_xmlquery.p_useNullAttrInd( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
P_USETYPEFORCOLLELEMTAG | ||||||||||||||||||||||||||||||||||||||||||||||
ORA-600 [kgmexchi11] Bug Workaround | dbms_xmlquery.p_useTypeForCollElemTag( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
REMOVEXSLTPARAM | ||||||||||||||||||||||||||||||||||||||||||||||
Removes the named top-level stylesheet parameter | dbms_xmlquery.removeXSLTParam( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
RESETRESULTSET | ||||||||||||||||||||||||||||||||||||||||||||||
Undocumented but appears to clear (reset) the result set | dbms_xmlquery.resetResultSet(ctxHdl IN ctxType); |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
SETBINDVALUE | ||||||||||||||||||||||||||||||||||||||||||||||
Sets a value for a particular bind name | dbms_xmlquery.setBindValue( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
SETCOLLIDATTRNAME | ||||||||||||||||||||||||||||||||||||||||||||||
Sets the name of the id attribute of the collection element's separator tag. Attribute is omitted if NULL is passed. | dbms_xmlquery.setCollIdAttrName( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
SETDATAHEADER | ||||||||||||||||||||||||||||||||||||||||||||||
Sets the XML data header | dbms_xmlquery.setDataHeader( |
|||||||||||||||||||||||||||||||||||||||||||||
See Demo Below | ||||||||||||||||||||||||||||||||||||||||||||||
SETDATEFORMAT | ||||||||||||||||||||||||||||||||||||||||||||||
Sets the format of the generated dates for the XML document | dbms_xmlquery.setDateFormat( |
|||||||||||||||||||||||||||||||||||||||||||||
See Demo Below | ||||||||||||||||||||||||||||||||||||||||||||||
SETENCODINGTAG | ||||||||||||||||||||||||||||||||||||||||||||||
Sets the encoding processing instruction in the XML document | dbms_xmlquery.setEncodingTag( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
SETERRORTAG | ||||||||||||||||||||||||||||||||||||||||||||||
Sets the tag to be used to enclose the XML error documents | dbms_xmlquery.setErrorTag( |
|||||||||||||||||||||||||||||||||||||||||||||
See Demo Below | ||||||||||||||||||||||||||||||||||||||||||||||
SETMAXROWS | ||||||||||||||||||||||||||||||||||||||||||||||
Sets the maximum number of rows to be converted to XML | dbms_xmlquery.setMaxRows( |
|||||||||||||||||||||||||||||||||||||||||||||
See Demo Below | ||||||||||||||||||||||||||||||||||||||||||||||
SETMETAHEADER | ||||||||||||||||||||||||||||||||||||||||||||||
Sets the XML meta header | dbms_xmlquery.setMetaHeader( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
SETRAISEEXCEPTION | ||||||||||||||||||||||||||||||||||||||||||||||
Tells the XSU to throw the raised exceptions | dbms_xmlquery.setRaiseException( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
SETRAISENOROWSEXCEPTION | ||||||||||||||||||||||||||||||||||||||||||||||
Tells the XSU to throw or not to throw an exception if the XML document generated is empty | dbms_xmlquery.setRaiseNoRowsException( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
SETROWIDATTRNAME | ||||||||||||||||||||||||||||||||||||||||||||||
Sets the name of the id attribute of the row enclosing tag | dbms_xmlquery.setRowIdAttrName( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
SETROWIDATTRVALUE | ||||||||||||||||||||||||||||||||||||||||||||||
Specifies the scalar column whose value is to be assigned to the id attribute of the row enclosing tag | dbms_xmlquery.setRowIdAttrValue( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
SETROWSETTAG | ||||||||||||||||||||||||||||||||||||||||||||||
Sets the tag to be used to enclose the XML dataset | dbms_xmlquery.setRowsetTag( |
|||||||||||||||||||||||||||||||||||||||||||||
See Demo Below | ||||||||||||||||||||||||||||||||||||||||||||||
SETROWTAG | ||||||||||||||||||||||||||||||||||||||||||||||
Sets the tag to be used to enclose the XML element | dbms_xmlquery.setRowTag( |
|||||||||||||||||||||||||||||||||||||||||||||
See Demo Below | ||||||||||||||||||||||||||||||||||||||||||||||
SETSKIPROWS | ||||||||||||||||||||||||||||||||||||||||||||||
Sets the number of rows to skip | dbms_xmlquery.setSkipRows( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
SETSQLTOXMLNAMEESCAPING | ||||||||||||||||||||||||||||||||||||||||||||||
Turns on or off escaping of XML tags in the case that the SQL object name, which is mapped to a XML identifier, is not a valid XML identifier | dbms_xmlquery.setSQLToXMLNameEscaping( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
SETSTRICTLEGALXMLCHARCHECK | ||||||||||||||||||||||||||||||||||||||||||||||
Undocumented | dbms_xmlquery.setStrictLegalXMLCharCheck( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
SETSTYLESHEETHEADER | ||||||||||||||||||||||||||||||||||||||||||||||
Sets the stylesheet header | dbms_xmlquery.setStylesheetHeader( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
SETTAGCASE | ||||||||||||||||||||||||||||||||||||||||||||||
Specified the case of the generated XML tags | dbms_xmlquery.setTagCase(ctxHdl IN ctxType, tCase IN NUMBER); |
|||||||||||||||||||||||||||||||||||||||||||||
See Demo Below and not how the tag case is affected in the output | ||||||||||||||||||||||||||||||||||||||||||||||
SETXSLT | ||||||||||||||||||||||||||||||||||||||||||||||
Registers a stylesheet to be applied to generated XML Overload 1 |
dbms_xmlquery.setXSLT( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
Overload 2 | dbms_xmlquery.setXSLT( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
SETXSLTPARAM | ||||||||||||||||||||||||||||||||||||||||||||||
Sets the value of a top-level stylesheet parameter | dbms_xmlquery.setXSLTParam( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
USENULLATTRIBUTEINDICATOR | ||||||||||||||||||||||||||||||||||||||||||||||
Specifies weather to use an XML attribute to indicate NULLness | dbms_xmlquery.useNullAttributeIndicator( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
USETYPEFORCOLLELEMTAG | ||||||||||||||||||||||||||||||||||||||||||||||
Tells the XSU to use the collection element's type name as the collection element tag name | dbms_xmlquery.useTypeForCollElemTag( |
|||||||||||||||||||||||||||||||||||||||||||||
TBD | ||||||||||||||||||||||||||||||||||||||||||||||
Demo | ||||||||||||||||||||||||||||||||||||||||||||||
This demo is formulated to use many of the packages individual objects to demonstrate their syntax ... not to do anything useful Note the use of setMaxRows to limit the number of rows selected in the demo to 2 |
DECLARE / |
Related Topics |
DBMS_XMLGEN |