1 package com.daffodilwoods.daffodildb.server.sql99.ddl.schemamanipulation; 2 3 import java.util.*; 4 5 import com.daffodilwoods.daffodildb.server.datadictionarysystem.*; 6 import com.daffodilwoods.daffodildb.server.serversystem.*; 7 import com.daffodilwoods.daffodildb.server.sql99.common.*; 8 import com.daffodilwoods.daffodildb.server.sql99.ddl.descriptors.*; 9 import com.daffodilwoods.daffodildb.server.sql99.ddl.schemadefinition.*; 10 import com.daffodilwoods.daffodildb.server.sql99.ddl.utility.*; 11 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.*; 12 import com.daffodilwoods.daffodildb.server.sql99.token.*; 13 import com.daffodilwoods.daffodildb.utils.*; 14 import com.daffodilwoods.daffodildb.utils.parser.*; 15 import com.daffodilwoods.database.resource.*; 16 17 public class dropuserstatement implements SQLschemamanipulationstatement { 18 public username _username0; 19 public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439221; 20 public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439222; 21 22 private ArrayList droppedSchemasList = new ArrayList(); 23 private ArrayList revokeSt = new ArrayList(); 24 private ArrayList roleDesc = new ArrayList(); 25 26 public Object run(Object object) throws DException { 27 _ServerSession currentSession = (_ServerSession) object; 28 checkIsSuperUser(currentSession); 29 UserDescriptor userDescriptor = new UserDescriptor(); 30 setUserName(currentSession, userDescriptor); 31 checkIsValidUser(userDescriptor.user_name, currentSession); 32 checkIsActiveUser(currentSession, userDescriptor.user_name); 33 dropUser(currentSession, userDescriptor); 34 35 refreshServerSystem(currentSession); 36 return null; 37 } 38 39 public void refreshServerSystem(_ServerSession currentSession) throws 40 DException { 41 for (int i = 0, size = droppedSchemasList.size(); i < size; i++) { 42 ( (dropschemastatement) droppedSchemasList.get(i)).refreshServerSystem(currentSession); 43 } 44 } 45 46 private void setUserName(_ServerSession currentSession, UserDescriptor userDescriptor) throws 47 DException { 48 userDescriptor.user_name = (String ) _username0.run(null); 49 try { 50 userDescriptor.load(currentSession); 51 } catch (DException ex) { 52 throw new DException("DSE7059", new Object [] {userDescriptor.user_name}); 53 } 54 } 55 56 private void checkIsActiveUser(_ServerSession currentSession, String userName) throws DException { 57 if (currentSession.isActiveAuthorization(userName)) { 58 throw new DException("DSE8097", new Object [] {userName}); 59 } 60 } 61 62 private void checkIsSuperUser(_ServerSession currentSession) throws DException { 63 String userName = currentSession.getCurrentUser(); 64 if (! (userName.equalsIgnoreCase(SystemTables.SYSTEM) 65 || userName.equalsIgnoreCase(ServerSystem.browserUser))) { 66 throw new DException("DSE8105", new Object [] {userName}); 67 } 68 } 69 70 private void checkIsValidUser(String userName, _ServerSession currentSession) throws DException { 71 if (userName.equalsIgnoreCase(SystemTables.SYSTEM) || userName.equalsIgnoreCase(SqlKeywords.PUBLIC)) { 72 throw new DException("DSE8104", new Object [] {userName}); 73 } 74 76 DataDictionary dd = (DataDictionary) currentSession.getDataDictionary(); 77 _SelectQueryIterator schemaIterator = (_SelectQueryIterator) dd.getPreparedStatementGetter(). 78 getSchemataTableExecuter().executeForFresh(new Object [] {"users", "users"}); 79 if (schemaIterator.first()) { 80 Object [] ob = (Object []) schemaIterator.getObject(); 81 for (int i = 0; i < ob.length; i++) { 82 if (userName.equalsIgnoreCase(ob[2].toString())) { 83 throw new DException("DSE8181", new Object [] {userName}); 84 } 85 } 86 } 87 } 88 89 public void dropUser(_ServerSession serverSession, 90 UserDescriptor userDescriptor) throws DException { 91 ArrayList schemasList = getUserSchemas(serverSession, userDescriptor); 92 for (int i = 0; i < schemasList.size(); i++) { 93 dropschemastatement dropSchema = new dropschemastatement(); 94 dropSchema.dropSchema( (SchemaDescriptor) schemasList.get(i), 95 serverSession, SqlKeywords.CASCADE); 96 droppedSchemasList.add(dropSchema); 97 } 98 revokeAllPrivilegesOfUser(serverSession, userDescriptor); 99 userDescriptor.delete(serverSession); 100 } 101 102 public ArrayList getUserSchemas(_ServerSession serverSession, UserDescriptor userDes) throws DException { 103 _SelectQueryIterator tableIterator = SqlSchemaConstants.getIterator(serverSession, 104 QueryMaker.getSchemasQueryForUser(), new Object [] {userDes.user_name}); 105 ArrayList schemaDescriptorsList = new ArrayList(); 106 if (tableIterator.first()) { 107 do { 108 SchemaDescriptor schemaDescriptor = new SchemaDescriptor(); 109 schemaDescriptor.loadDataFromRecord(tableIterator); 110 schemaDescriptorsList.add(schemaDescriptor); 111 } while (tableIterator.next()); 112 } 113 return schemaDescriptorsList; 114 } 115 116 private void revokeAllPrivilegesOfUser(_ServerSession serverSession, 117 UserDescriptor userDescriptor) throws 118 DException { 119 String userName = userDescriptor.user_name; 120 revokeTablePrivileges(serverSession, userName); 121 revokeColumnPrivileges(serverSession, userName); 122 revokeUsagePrivileges(serverSession, userName); 123 revokeRoutinePrivileges(serverSession, userName); 124 revokeRoles(serverSession, userName, roleDesc, revokeSt); 125 dropAllDependentRoles(serverSession); 126 127 } 128 129 private void revokeTablePrivileges(_ServerSession serverSession, 130 String userName) throws DException { 131 StringBuffer queryForTablePrivileges = new StringBuffer (); 132 queryForTablePrivileges.append( 133 " select distinct table_catalog,table_schema,table_name,grantor from ") 134 .append(SystemTables.table_privileges_TableName).append( 135 " where grantee = ? "); 136 _SelectQueryIterator tablePrivilegesIterator = SqlSchemaConstants.getIterator( 137 serverSession, queryForTablePrivileges.toString(), 138 new Object [] {userName}); 139 if (tablePrivilegesIterator.first()) { 140 do { 141 StringBuffer query = new StringBuffer (); 142 Object [] values = (Object []) tablePrivilegesIterator.getObject(); 143 query.append("REVOKE ALL PRIVILEGES ON ") 144 .append(QuotedUtility.getUserIdentifier( (String ) values[0])). 145 append(".") 146 .append(QuotedUtility.getUserIdentifier( (String ) values[1])). 147 append(".") 148 .append(QuotedUtility.getUserIdentifier( (String ) values[2])) 149 .append(" FROM ") 150 .append(userName).append(" CASCADE"); 151 152 revokeprivilegestatement _revokePrivilegesStatement = ( 153 revokeprivilegestatement) Parser.parseQuery(query.toString()); 154 _revokePrivilegesStatement.setIsSelfInitiated(false); 155 _revokePrivilegesStatement.setGrantor( ( (String ) values[3])); 156 _revokePrivilegesStatement.run(serverSession.getSystemServerSession()); 157 158 } while (tablePrivilegesIterator.next()); 159 } 160 } 161 162 private void revokeColumnPrivileges(_ServerSession serverSession, 163 String userName) throws DException { 164 StringBuffer queryForColumnPrivileges = new StringBuffer (); 165 queryForColumnPrivileges.append( 166 " select table_catalog,table_schema,table_name,column_name,privilege_type,grantor from ") 167 .append(SystemTables.column_privileges_TableName).append( 168 " where grantee = ? "); 169 _SelectQueryIterator columnPrivilegesIterator = SqlSchemaConstants.getIterator( 170 serverSession, queryForColumnPrivileges.toString(), 171 new Object [] {userName}); 172 if (columnPrivilegesIterator.first()) { 173 do { 174 StringBuffer query = new StringBuffer (); 175 Object [] values = (Object []) columnPrivilegesIterator.getObject(); 176 query.append("REVOKE ").append( (String ) values[4]) 177 .append("(").append(QuotedUtility.getUserIdentifier( (String ) 178 values[3])) 179 .append(") ON TABLE ") 180 .append(QuotedUtility.getUserIdentifier( (String ) values[0])). 181 append(".") 182 .append(QuotedUtility.getUserIdentifier( (String ) values[1])). 183 append(".") 184 .append(QuotedUtility.getUserIdentifier( (String ) values[2])) 185 .append(" FROM ") 186 .append(userName).append(" CASCADE "); 187 revokeprivilegestatement _revokePrivilegeStatement = ( 188 revokeprivilegestatement) Parser.parseQuery(query.toString()); 189 _revokePrivilegeStatement.setIsSelfInitiated(false); 190 _revokePrivilegeStatement.setGrantor( ( (String ) values[5])); 191 _revokePrivilegeStatement.run(serverSession.getSystemServerSession()); 192 } while (columnPrivilegesIterator.next()); 193 } 194 195 } 196 197 private void revokeRoutinePrivileges(_ServerSession serverSession, 198 String userName) throws DException { 199 StringBuffer queryForRoutinePrivileges = new StringBuffer (); 200 queryForRoutinePrivileges.append( 201 " select distinct specific_catalog,specific_schema,specific_name,grantor from ") 202 .append(SystemTables.routine_privileges_TableName).append( 203 " where grantee = ? "); 204 _SelectQueryIterator routinePrivilegesIterator = SqlSchemaConstants.getIterator( 205 serverSession, queryForRoutinePrivileges.toString(), 206 new Object [] {userName}); 207 if (routinePrivilegesIterator.first()) { 208 do { 209 StringBuffer query = new StringBuffer (); 210 Object [] values = (Object []) routinePrivilegesIterator.getObject(); 211 query.append("REVOKE ALL PRIVILEGES ON SPECIFIC PROCEDURE ") 212 .append(QuotedUtility.getUserIdentifier( (String ) values[0])). 213 append(".") 214 .append(QuotedUtility.getUserIdentifier( (String ) values[1])). 215 append(".") 216 .append(QuotedUtility.getUserIdentifier( (String ) values[2])) 217 .append(" FROM ") 218 .append(userName).append(" CASCADE"); 219 220 revokeprivilegestatement _revokePrivilegesStatement = ( 221 revokeprivilegestatement) Parser.parseQuery(query.toString()); 222 _revokePrivilegesStatement.setIsSelfInitiated(false); 223 _revokePrivilegesStatement.setGrantor( ( (String ) values[3])); 224 _revokePrivilegesStatement.run(serverSession.getSystemServerSession()); 225 } while (routinePrivilegesIterator.next()); 226 } 227 228 } 229 230 private void revokeUsagePrivileges(_ServerSession serverSession, 231 String userName) throws DException { 232 StringBuffer queryForUsagePrivileges = new StringBuffer (); 233 queryForUsagePrivileges.append( 234 " select object_catalog,object_schema,object_name,object_type,grantor from ") 235 .append(SystemTables.usage_privileges_TableName).append( 236 " where grantee = ? "); 237 _SelectQueryIterator usagePrivilegesIterator = SqlSchemaConstants.getIterator( 238 serverSession, queryForUsagePrivileges.toString(), 239 new Object [] {userName}); 240 if (usagePrivilegesIterator.first()) { 241 do { 242 StringBuffer query = new StringBuffer (); 243 Object [] values = (Object []) usagePrivilegesIterator.getObject(); 244 query.append("REVOKE USAGE ON ") 245 .append( (String ) values[3]) 246 .append(" ") 247 .append(QuotedUtility.getUserIdentifier( (String ) values[0])). 248 append(".") 249 .append(QuotedUtility.getUserIdentifier( (String ) values[1])). 250 append(".") 251 .append(QuotedUtility.getUserIdentifier( (String ) values[2])) 252 .append(" FROM ") 253 .append(userName).append(" CASCADE"); 254 revokeprivilegestatement _revokePrivilegesStatement = ( 255 revokeprivilegestatement) Parser.parseQuery(query.toString()); 256 _revokePrivilegesStatement.setIsSelfInitiated(false); 257 _revokePrivilegesStatement.setGrantor( ( (String ) values[4])); 258 _revokePrivilegesStatement.run(serverSession.getSystemServerSession()); 259 260 } while (usagePrivilegesIterator.next()); 261 } 262 263 } 264 265 296 297 299 private void revokeRolesDescriptors(_ServerSession serverSession, 300 String userName, ArrayList roleDesc, ArrayList revokeSt) throws DException { 301 StringBuffer queryForUserRoles = new StringBuffer (); 302 queryForUserRoles.append(" select * from ") 303 .append(SystemTables.role_authorization_TableName).append(" where grantee = ? and grantor = ?"); 304 _SelectQueryIterator rolesIterator = SqlSchemaConstants.getIterator( 305 serverSession, queryForUserRoles.toString(), new Object [] {userName, SystemTables.SYSTEM}); 306 307 if (rolesIterator.first()) { 308 do { 309 Object [] values = (Object []) rolesIterator.getObject(); 310 StringBuffer revokeQuery = new StringBuffer (); 311 revokeQuery.append("revoke ").append(QuotedUtility.getUserIdentifier(values[0].toString())) 312 .append(" from ").append(QuotedUtility.getUserIdentifier(userName)) 313 .append(" CASCADE"); 314 revokerolestatement _revokeRoleSt = (revokerolestatement) Parser.parseQuery(revokeQuery.toString()); 315 revokeSt.add(_revokeRoleSt); 316 317 RoleDescriptor roleDes = new RoleDescriptor(); 318 roleDes.role_name = (String ) values[0]; 319 roleDes.load(serverSession); 320 roleDesc.add(roleDes); 321 revokeRolesDescriptors(serverSession, roleDes.role_name, roleDesc, revokeSt); 322 } while (rolesIterator.next()); 323 } 324 } 325 326 private void revokeRoles(_ServerSession serverSession, 327 String userName, ArrayList roleDesc, ArrayList revokeSt) throws DException { 328 revokeRolesAuthDescriptors(serverSession, userName); 329 revokeRolesDescriptors(serverSession, userName, roleDesc, revokeSt); 330 } 331 332 356 private void revokeRolesAuthDescriptors(_ServerSession serverSession, 357 String userName) throws DException { 358 StringBuffer queryForRoleAuthDes = new StringBuffer (); 359 queryForRoleAuthDes.append(" select * from ") 360 .append(SystemTables.role_authorization_TableName).append(" where grantee = ? "); 361 _SelectQueryIterator roleAuthDesIter = SqlSchemaConstants.getIterator( 362 serverSession, queryForRoleAuthDes.toString(), new Object [] {userName}); 363 364 if (roleAuthDesIter.first()) { 365 do { 366 Object [] values = (Object []) roleAuthDesIter.getObject(); 367 StringBuffer revokeQuery = new StringBuffer (); 368 revokeQuery.append("revoke ").append(values[0].toString()) 369 .append(" from ").append(userName) 370 .append(" CASCADE"); 371 revokerolestatement _revokeRoleSt = (revokerolestatement) Parser.parseQuery(revokeQuery.toString()); 372 _revokeRoleSt.setRoleGrantor( (String ) values[2]); 373 _revokeRoleSt.run(serverSession); 374 } while (roleAuthDesIter.next()); 375 } 376 } 377 378 380 private void dropAllDependentRoles(_ServerSession currentSession) throws DException { 381 for (int i = 0; i < revokeSt.size(); i++) { 382 revokerolestatement _revokeRoleSt = (revokerolestatement) revokeSt.get(i); 383 _revokeRoleSt.run(currentSession.getSystemServerSession()); 384 } 385 for (int j = 0; j < roleDesc.size(); j++) { 386 RoleDescriptor roleDes1 = (RoleDescriptor) roleDesc.get(j); 387 roleDes1.delete(currentSession); 388 } 389 } 390 391 public Object clone() throws CloneNotSupportedException { 392 return this; 393 } 394 395 public String toString() { 396 StringBuffer sb = new StringBuffer (); 397 sb.append(" "); 398 sb.append(_SRESERVEDWORD12065439222); 399 sb.append(" "); 400 sb.append(_SRESERVEDWORD12065439221); 401 sb.append(" "); 402 sb.append(_username0); 403 return sb.toString(); 404 } 405 } 406 | Popular Tags |