| Message view | « Date » · « Thread » |
|---|---|
| Top | « Date » · « Thread » |
| From | d..@apache.org |
| Subject | svn commit: r420306 [2/6] - in /db/derby/code/trunk/java: engine/org/apache/derby/catalog/ engine/org/apache/derby/iapi/services/io/ engine/org/apache/derby/iapi/sql/dictionary/ engine/org/apache/derby/impl/sql/catalog/ engine/org/apache/derby/impl/sql... |
| Date | Sun, 09 Jul 2006 16:17:57 GMT |
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/CreateViewConstantAction.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/CreateViewConstantAction.java?rev=420306&r1=420305&r2=420306&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/CreateViewConstantAction.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/CreateViewConstantAction.java Sun Jul 9 09:17:53 2006
@@ -216,6 +216,8 @@
throw StandardException.plainWrapException(te);
}
}
+ //store view's dependency on various privileges in the dependeny system
+ storeViewTriggerDependenciesOnPrivileges(activation, vd);
dd.addDescriptor(vd, sd, DataDictionary.SYSVIEWS_CATALOG_NUM, true, tc);
}
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/DDLConstantAction.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/DDLConstantAction.java?rev=420306&r1=420305&r2=420306&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/DDLConstantAction.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/DDLConstantAction.java Sun Jul 9 09:17:53 2006
@@ -20,6 +20,9 @@
package org.apache.derby.impl.sql.execute;
+import java.util.Iterator;
+import java.util.List;
+
import org.apache.derby.iapi.services.monitor.Monitor;
import org.apache.derby.iapi.services.sanity.SanityManager;
@@ -30,12 +33,20 @@
import org.apache.derby.iapi.error.StandardException;
+import org.apache.derby.iapi.sql.conn.Authorizer;
import org.apache.derby.iapi.sql.conn.LanguageConnectionContext;
-import org.apache.derby.iapi.sql.dictionary.DataDescriptorGenerator;
+import org.apache.derby.iapi.sql.dictionary.ColPermsDescriptor;
import org.apache.derby.iapi.sql.dictionary.DataDictionary;
import org.apache.derby.iapi.sql.dictionary.DataDictionaryContext;
+import org.apache.derby.iapi.sql.dictionary.PermissionsDescriptor;
+import org.apache.derby.iapi.sql.dictionary.ReferencedKeyConstraintDescriptor;
import org.apache.derby.iapi.sql.dictionary.SchemaDescriptor;
+import org.apache.derby.iapi.sql.dictionary.StatementColumnPermission;
+import org.apache.derby.iapi.sql.dictionary.StatementPermission;
+import org.apache.derby.iapi.sql.dictionary.StatementRoutinePermission;
+import org.apache.derby.iapi.sql.dictionary.StatementSchemaPermission;
+import org.apache.derby.iapi.sql.dictionary.StatementTablePermission;
import org.apache.derby.iapi.sql.depend.Dependency;
import org.apache.derby.iapi.sql.depend.Dependent;
@@ -210,6 +221,256 @@
// error reporting.
return statementType + objectName;
+ }
+
+
+ /**
+ * This method saves dependencies of constraints on privileges in the
+ * dependency system. It gets called by CreateConstraintConstantAction.
+ * Views and triggers and constraints run with definer's privileges. If
+ * one of the required privileges is revoked from the definer, the
+ * dependent view/trigger/constraint on that privilege will be dropped
+ * automatically. In order to implement this behavior, we need to save
+ * view/trigger/constraint dependencies on required privileges in the
+ * dependency system. Following method accomplishes that part of the
+ * equation for constraints only. The dependency collection for
+ * constraints is not same as for views and triggers and hence
+ * constraints are handled by this special method.
+ * Views and triggers can depend on many different kind of privileges
+ * where as constraints only depend on REFERENCES privilege on a table.
+ * Another difference is only one view or trigger can be defined by a
+ * sql statement and hence all the dependencies collected for the sql
+ * statement apply to the view or trigger in question. As for constraints,
+ * one sql statement can defined multiple constraints and hence the
+ * all the privileges required by the statement are not necessarily
+ * required by all the constraints defined by that sql statement. We need
+ * to identify right privileges for right constraints for a given sql
+ * statement. Because of these differences between constraints and views
+ * (and triggers), there are 2 different methods in this class to save
+ * their privileges in the dependency system.
+ *
+ * @param activation The execution environment for this constant action.
+ * @param dependent Make this object depend on required privileges
+ * @param refTableUUID Make sure we are looking for REFERENCES privilege
+ * for right table
+ *
+ * @exception StandardException Thrown on failure
+ */
+ protected void storeConstraintDependenciesOnPrivileges(
+ Activation activation, Dependent dependent, UUID refTableUUID)
+ throws StandardException
+ {
+ LanguageConnectionContext lcc = activation.getLanguageConnectionContext();
+ DataDictionary dd = lcc.getDataDictionary();
+ DependencyManager dm = dd.getDependencyManager();
+
+ //If a dba is creating this constraint, then no need to collect any
+ //privilege dependencies because a dba can access any objects without
+ //any restrictions
+ if (!(lcc.getAuthorizationId().equals(dd.getAuthorizationDBA())))
+ {
+ PermissionsDescriptor permDesc;
+ //Now, it is time to add into dependency system, constraint's
+ //dependency on REFERENCES privilege. If the REFERENCES privilege is
+ //revoked from the constraint owner, the constraint will get
+ //dropped automatically.
+ List requiredPermissionsList = activation.getPreparedStatement().getRequiredPermissionsList();
+ if (requiredPermissionsList != null && ! requiredPermissionsList.isEmpty())
+ {
+ for(Iterator iter = requiredPermissionsList.iterator();iter.hasNext();)
+ {
+ StatementPermission statPerm = (StatementPermission) iter.next();
+ //First check if we are dealing with a Table or
+ //Column level privilege. All the other privileges
+ //are not required for a foreign key constraint.
+ if (statPerm instanceof StatementTablePermission)
+ {//It is a table/column level privilege
+ StatementTablePermission statementTablePermission =
+ (StatementTablePermission) statPerm;
+ //Check if we are dealing with REFERENCES privilege.
+ //If not, move on to the next privilege in the
+ //required privileges list
+ if (statementTablePermission.getPrivType() != Authorizer.REFERENCES_PRIV)
+ continue;
+ //Next check is this REFERENCES privilege is
+ //on the same table as referenced by the foreign
+ //key constraint? If not, move on to the next
+ //privilege in the required privileges list
+ if (!statementTablePermission.getTableUUID().equals(refTableUUID))
+ continue;
+ } else if (statPerm instanceof StatementSchemaPermission
+ || statPerm instanceof StatementRoutinePermission)
+ continue;
+
+ //We know that we are working with a REFERENCES
+ //privilege. Find all the PermissionDescriptors for
+ //this privilege and make constraint depend on it
+ //through dependency manager.
+ //The REFERENCES privilege could be defined at the
+ //table level or it could be defined at individual
+ //column levels. In addition, individual column
+ //REFERENCES privilege could be available at the
+ //user level or PUBLIC level.
+ permDesc = statPerm.getPermissionDescriptor(lcc.getAuthorizationId(), dd);
+ if (permDesc == null)
+ {
+ //No REFERENCES privilege exists for given
+ //authorizer at table or column level.
+ //REFERENCES privilege has to exist at at PUBLIC level
+ permDesc = statPerm.getPermissionDescriptor(Authorizer.PUBLIC_AUTHORIZATION_ID, dd);
+ if (!(permDesc.checkOwner(lcc.getAuthorizationId())))
+ dm.addDependency(dependent, permDesc, lcc.getContextManager());
+ } else
+ //if the object on which permission is required is owned by the
+ //same user as the current user, then no need to keep that
+ //object's privilege dependency in the dependency system
+ if (!(permDesc.checkOwner(lcc.getAuthorizationId())))
+ {
+ dm.addDependency(dependent, permDesc, lcc.getContextManager());
+ if (permDesc instanceof ColPermsDescriptor)
+ {
+ //The if statement above means we found a
+ //REFERENCES privilege at column level for
+ //the given authorizer. If this privilege
+ //doesn't cover all the column , then there
+ //has to exisit REFERENCES for the remaining
+ //columns at PUBLIC level. Get that permission
+ //descriptor and save it in dependency system
+ StatementColumnPermission statementColumnPermission = (StatementColumnPermission) statPerm;
+ permDesc = statementColumnPermission.getPUBLIClevelColPermsDescriptor(lcc.getAuthorizationId(), dd);
+ //Following if checks if some column level privileges
+ //exist only at public level. If so, then the public
+ //level column privilege dependency is added
+ //into the dependency system
+ if (permDesc != null)
+ dm.addDependency(dependent, permDesc, lcc.getContextManager());
+ }
+ }
+ //We have found the REFERENCES privilege for all the
+ //columns in foreign key constraint and we don't
+ //need to go through the rest of the privileges
+ //for this sql statement.
+ break;
+ }
+ }
+ }
+
+ }
+
+ /**
+ * This method saves dependencies of views and triggers on privileges in
+ * the dependency system. It gets called by CreateViewConstantAction
+ * and CreateTriggerConstantAction. Views and triggers and constraints
+ * run with definer's privileges. If one of the required privileges is
+ * revoked from the definer, the dependent view/trigger/constraint on
+ * that privilege will be dropped automatically. In order to implement
+ * this behavior, we need to save view/trigger/constraint dependencies
+ * on required privileges in the dependency system. Following method
+ * accomplishes that part of the equation for views and triggers. The
+ * dependency collection for constraints is not same as for views and
+ * triggers and hence constraints are not covered by this method.
+ * Views and triggers can depend on many different kind of privileges
+ * where as constraints only depend on REFERENCES privilege on a table.
+ * Another difference is only one view or trigger can be defined by a
+ * sql statement and hence all the dependencies collected for the sql
+ * statement apply to the view or trigger in question. As for constraints,
+ * one sql statement can defined multiple constraints and hence the
+ * all the privileges required by the statement are not necessarily
+ * required by all the constraints defined by that sql statement. We need
+ * to identify right privileges for right constraints for a given sql
+ * statement. Because of these differences between constraints and views
+ * (and triggers), there are 2 different methods in this class to save
+ * their privileges in the dependency system.
+ *
+ * @param activation The execution environment for this constant action.
+ * @param dependent Make this object depend on required privileges
+ *
+ * @exception StandardException Thrown on failure
+ */
+ protected void storeViewTriggerDependenciesOnPrivileges(
+ Activation activation, Dependent dependent)
+ throws StandardException
+ {
+ LanguageConnectionContext lcc = activation.getLanguageConnectionContext();
+ DataDictionary dd = lcc.getDataDictionary();
+ DependencyManager dm = dd.getDependencyManager();
+
+ //If a dba is creating this view/triiger, then no need to collect any
+ //privilege dependencies because a dba can access any objects without
+ //any restrictions
+ if (!(lcc.getAuthorizationId().equals(dd.getAuthorizationDBA())))
+ {
+ PermissionsDescriptor permDesc;
+ List requiredPermissionsList = activation.getPreparedStatement().getRequiredPermissionsList();
+ if (requiredPermissionsList != null && ! requiredPermissionsList.isEmpty())
+ {
+ for(Iterator iter = requiredPermissionsList.iterator();iter.hasNext();)
+ {
+ StatementPermission statPerm = (StatementPermission) iter.next();
+ //The schema ownership permission just needs to be checked
+ //at object creation time, to see if the object creator has
+ //permissions to create the object in the specified schema.
+ //But we don't need to add schema permission to list of
+ //permissions that the object is dependent on once it is
+ //created.
+ if (statPerm instanceof StatementSchemaPermission)
+ continue;
+ //See if we can find the required privilege for given authorizer?
+ permDesc = statPerm.getPermissionDescriptor(lcc.getAuthorizationId(), dd);
+ if (permDesc == null)//privilege not found for given authorizer
+ {
+ //The if condition above means that required privilege does
+ //not exist at the user level. The privilege has to exist at
+ //PUBLIC level.
+ permDesc = statPerm.getPermissionDescriptor(Authorizer.PUBLIC_AUTHORIZATION_ID, dd);
+ //If the user accessing the object is the owner of that
+ //object, then no privilege tracking is needed for the
+ //owner.
+ if (!(permDesc.checkOwner(lcc.getAuthorizationId())))
+ dm.addDependency(dependent, permDesc, lcc.getContextManager());
+ continue;
+ }
+ //if the object on which permission is required is owned by the
+ //same user as the current user, then no need to keep that
+ //object's privilege dependency in the dependency system
+ if (!(permDesc.checkOwner(lcc.getAuthorizationId())))
+ {
+ dm.addDependency(dependent, permDesc, lcc.getContextManager());
+ if (permDesc instanceof ColPermsDescriptor)
+ {
+ //For a given table, the table owner can give privileges
+ //on some columns at individual user level and privileges
+ //on some columns at PUBLIC level. Hence, when looking for
+ //column level privileges, we need to look both at user
+ //level as well as PUBLIC level(only if user level column
+ //privileges do not cover all the columns accessed by this
+ //object). We have finished adding dependency for user level
+ //columns, now we are checking if some required column
+ //level privileges are at PUBLIC level.
+ //A specific eg of a view
+ //user1
+ //create table t11(c11 int, c12 int);
+ //grant select(c11) on t1 to user2;
+ //grant select(c12) on t1 to PUBLIC;
+ //user2
+ //create view v1 as select c11 from user1.t11 where c12=2;
+ //For the view above, there are 2 column level privilege
+ //depencies, one for column c11 which exists directly
+ //for user2 and one for column c12 which exists at PUBLIC level.
+ StatementColumnPermission statementColumnPermission = (StatementColumnPermission) statPerm;
+ permDesc = statementColumnPermission.getPUBLIClevelColPermsDescriptor(lcc.getAuthorizationId(), dd);
+ //Following if checks if some column level privileges
+ //exist only at public level. If so, then the public
+ //level column privilege dependency of view is added
+ //into dependency system.
+ if (permDesc != null)
+ dm.addDependency(dependent, permDesc, lcc.getContextManager());
+ }
+ }
+ }
+ }
+
+ }
}
}
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/syscat.out
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/syscat.out?rev=420306&r1=420305&r2=420306&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/syscat.out (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/syscat.out Sun Jul 9 09:17:53 2006
@@ -153,11 +153,12 @@
SYSCHECKS |CHECKDEFINITION |2 |LONG VARCHAR NOT NULL
SYSCHECKS |CONSTRAINTID |1 |CHAR(36) NOT NULL
SYSCHECKS |REFERENCEDCOLUMNS |3 |org.apache.derby.catalog.ReferencedColumns NOT NULL
-SYSCOLPERMS |COLUMNS |5 |org.apache.derby.iapi.services.io.FormatableBitSet NOT NULL
-SYSCOLPERMS |GRANTEE |1 |VARCHAR(128) NOT NULL
-SYSCOLPERMS |GRANTOR |2 |VARCHAR(128) NOT NULL
-SYSCOLPERMS |TABLEID |3 |CHAR(36) NOT NULL
-SYSCOLPERMS |TYPE |4 |CHAR(1) NOT NULL
+SYSCOLPERMS |COLPERMSID |1 |CHAR(36) NOT NULL
+SYSCOLPERMS |COLUMNS |6 |org.apache.derby.iapi.services.io.FormatableBitSet NOT NULL
+SYSCOLPERMS |GRANTEE |2 |VARCHAR(128) NOT NULL
+SYSCOLPERMS |GRANTOR |3 |VARCHAR(128) NOT NULL
+SYSCOLPERMS |TABLEID |4 |CHAR(36) NOT NULL
+SYSCOLPERMS |TYPE |5 |CHAR(1) NOT NULL
SYSCOLUMNS |AUTOINCREMENTINC |9 |BIGINT
SYSCOLUMNS |AUTOINCREMENTSTART |8 |BIGINT
SYSCOLUMNS |AUTOINCREMENTVALUE |7 |BIGINT
@@ -203,10 +204,11 @@
SYSREQUIREDPERM |OPERATOR |1 |CHAR(36) NOT NULL
SYSREQUIREDPERM |OPERATORTYPE |2 |CHAR(1) NOT NULL
SYSREQUIREDPERM |PERMTYPE |3 |CHAR(1) NOT NULL
-SYSROUTINEPERMS |ALIASID |3 |CHAR(36) NOT NULL
-SYSROUTINEPERMS |GRANTEE |1 |VARCHAR(128) NOT NULL
-SYSROUTINEPERMS |GRANTOPTION |4 |CHAR(1) NOT NULL
-SYSROUTINEPERMS |GRANTOR |2 |VARCHAR(128) NOT NULL
+SYSROUTINEPERMS |ALIASID |4 |CHAR(36) NOT NULL
+SYSROUTINEPERMS |GRANTEE |2 |VARCHAR(128) NOT NULL
+SYSROUTINEPERMS |GRANTOPTION |5 |CHAR(1) NOT NULL
+SYSROUTINEPERMS |GRANTOR |3 |VARCHAR(128) NOT NULL
+SYSROUTINEPERMS |ROUTINEPERMSID |1 |CHAR(36) NOT NULL
SYSSCHEMAS |AUTHORIZATIONID |3 |VARCHAR(128) NOT NULL
SYSSCHEMAS |SCHEMAID |1 |CHAR(36) NOT NULL
SYSSCHEMAS |SCHEMANAME |2 |VARCHAR(128) NOT NULL
@@ -227,15 +229,16 @@
SYSSTATISTICS |TABLEID |3 |CHAR(36) NOT NULL
SYSSTATISTICS |TYPE |5 |CHAR(1) NOT NULL
SYSSTATISTICS |VALID |6 |BOOLEAN NOT NULL
-SYSTABLEPERMS |DELETEPRIV |5 |CHAR(1) NOT NULL
-SYSTABLEPERMS |GRANTEE |1 |VARCHAR(128) NOT NULL
-SYSTABLEPERMS |GRANTOR |2 |VARCHAR(128) NOT NULL
-SYSTABLEPERMS |INSERTPRIV |6 |CHAR(1) NOT NULL
-SYSTABLEPERMS |REFERENCESPRIV |8 |CHAR(1) NOT NULL
-SYSTABLEPERMS |SELECTPRIV |4 |CHAR(1) NOT NULL
-SYSTABLEPERMS |TABLEID |3 |CHAR(36) NOT NULL
-SYSTABLEPERMS |TRIGGERPRIV |9 |CHAR(1) NOT NULL
-SYSTABLEPERMS |UPDATEPRIV |7 |CHAR(1) NOT NULL
+SYSTABLEPERMS |DELETEPRIV |6 |CHAR(1) NOT NULL
+SYSTABLEPERMS |GRANTEE |2 |VARCHAR(128) NOT NULL
+SYSTABLEPERMS |GRANTOR |3 |VARCHAR(128) NOT NULL
+SYSTABLEPERMS |INSERTPRIV |7 |CHAR(1) NOT NULL
+SYSTABLEPERMS |REFERENCESPRIV |9 |CHAR(1) NOT NULL
+SYSTABLEPERMS |SELECTPRIV |5 |CHAR(1) NOT NULL
+SYSTABLEPERMS |TABLEID |4 |CHAR(36) NOT NULL
+SYSTABLEPERMS |TABLEPERMSID |1 |CHAR(36) NOT NULL
+SYSTABLEPERMS |TRIGGERPRIV |10 |CHAR(1) NOT NULL
+SYSTABLEPERMS |UPDATEPRIV |8 |CHAR(1) NOT NULL
SYSTABLES |LOCKGRANULARITY |5 |CHAR(1) NOT NULL
SYSTABLES |SCHEMAID |4 |CHAR(36) NOT NULL
SYSTABLES |TABLEID |1 |CHAR(36) NOT NULL
@@ -368,11 +371,12 @@
SYSCHECKS |CHECKDEFINITION |2 |LONG VARCHAR NOT NULL
SYSCHECKS |CONSTRAINTID |1 |CHAR(36) NOT NULL
SYSCHECKS |REFERENCEDCOLUMNS |3 |org.apache.derby.catalog.ReferencedColumns NOT NULL
-SYSCOLPERMS |COLUMNS |5 |org.apache.derby.iapi.services.io.FormatableBitSet NOT NULL
-SYSCOLPERMS |GRANTEE |1 |VARCHAR(128) NOT NULL
-SYSCOLPERMS |GRANTOR |2 |VARCHAR(128) NOT NULL
-SYSCOLPERMS |TABLEID |3 |CHAR(36) NOT NULL
-SYSCOLPERMS |TYPE |4 |CHAR(1) NOT NULL
+SYSCOLPERMS |COLPERMSID |1 |CHAR(36) NOT NULL
+SYSCOLPERMS |COLUMNS |6 |org.apache.derby.iapi.services.io.FormatableBitSet NOT NULL
+SYSCOLPERMS |GRANTEE |2 |VARCHAR(128) NOT NULL
+SYSCOLPERMS |GRANTOR |3 |VARCHAR(128) NOT NULL
+SYSCOLPERMS |TABLEID |4 |CHAR(36) NOT NULL
+SYSCOLPERMS |TYPE |5 |CHAR(1) NOT NULL
SYSCOLUMNS |AUTOINCREMENTINC |9 |BIGINT
SYSCOLUMNS |AUTOINCREMENTSTART |8 |BIGINT
SYSCOLUMNS |AUTOINCREMENTVALUE |7 |BIGINT
@@ -418,10 +422,11 @@
SYSREQUIREDPERM |OPERATOR |1 |CHAR(36) NOT NULL
SYSREQUIREDPERM |OPERATORTYPE |2 |CHAR(1) NOT NULL
SYSREQUIREDPERM |PERMTYPE |3 |CHAR(1) NOT NULL
-SYSROUTINEPERMS |ALIASID |3 |CHAR(36) NOT NULL
-SYSROUTINEPERMS |GRANTEE |1 |VARCHAR(128) NOT NULL
-SYSROUTINEPERMS |GRANTOPTION |4 |CHAR(1) NOT NULL
-SYSROUTINEPERMS |GRANTOR |2 |VARCHAR(128) NOT NULL
+SYSROUTINEPERMS |ALIASID |4 |CHAR(36) NOT NULL
+SYSROUTINEPERMS |GRANTEE |2 |VARCHAR(128) NOT NULL
+SYSROUTINEPERMS |GRANTOPTION |5 |CHAR(1) NOT NULL
+SYSROUTINEPERMS |GRANTOR |3 |VARCHAR(128) NOT NULL
+SYSROUTINEPERMS |ROUTINEPERMSID |1 |CHAR(36) NOT NULL
SYSSCHEMAS |AUTHORIZATIONID |3 |VARCHAR(128) NOT NULL
SYSSCHEMAS |SCHEMAID |1 |CHAR(36) NOT NULL
SYSSCHEMAS |SCHEMANAME |2 |VARCHAR(128) NOT NULL
@@ -442,15 +447,16 @@
SYSSTATISTICS |TABLEID |3 |CHAR(36) NOT NULL
SYSSTATISTICS |TYPE |5 |CHAR(1) NOT NULL
SYSSTATISTICS |VALID |6 |BOOLEAN NOT NULL
-SYSTABLEPERMS |DELETEPRIV |5 |CHAR(1) NOT NULL
-SYSTABLEPERMS |GRANTEE |1 |VARCHAR(128) NOT NULL
-SYSTABLEPERMS |GRANTOR |2 |VARCHAR(128) NOT NULL
-SYSTABLEPERMS |INSERTPRIV |6 |CHAR(1) NOT NULL
-SYSTABLEPERMS |REFERENCESPRIV |8 |CHAR(1) NOT NULL
-SYSTABLEPERMS |SELECTPRIV |4 |CHAR(1) NOT NULL
-SYSTABLEPERMS |TABLEID |3 |CHAR(36) NOT NULL
-SYSTABLEPERMS |TRIGGERPRIV |9 |CHAR(1) NOT NULL
-SYSTABLEPERMS |UPDATEPRIV |7 |CHAR(1) NOT NULL
+SYSTABLEPERMS |DELETEPRIV |6 |CHAR(1) NOT NULL
+SYSTABLEPERMS |GRANTEE |2 |VARCHAR(128) NOT NULL
+SYSTABLEPERMS |GRANTOR |3 |VARCHAR(128) NOT NULL
+SYSTABLEPERMS |INSERTPRIV |7 |CHAR(1) NOT NULL
+SYSTABLEPERMS |REFERENCESPRIV |9 |CHAR(1) NOT NULL
+SYSTABLEPERMS |SELECTPRIV |5 |CHAR(1) NOT NULL
+SYSTABLEPERMS |TABLEID |4 |CHAR(36) NOT NULL
+SYSTABLEPERMS |TABLEPERMSID |1 |CHAR(36) NOT NULL
+SYSTABLEPERMS |TRIGGERPRIV |10 |CHAR(1) NOT NULL
+SYSTABLEPERMS |UPDATEPRIV |8 |CHAR(1) NOT NULL
SYSTABLES |LOCKGRANULARITY |5 |CHAR(1) NOT NULL
SYSTABLES |SCHEMAID |4 |CHAR(36) NOT NULL
SYSTABLES |TABLEID |1 |CHAR(36) NOT NULL
| |
| Mime |
|
| View raw message | |