| 1 package com.daffodilwoods.daffodildb.server.sql99.ddl.revoke; 2 3 7 import java.util.*; 8 9 import com.daffodilwoods.daffodildb.server.datadictionarysystem.*; 10 import com.daffodilwoods.daffodildb.server.serversystem.*; 11 import com.daffodilwoods.daffodildb.server.sql99.common.*; 12 import com.daffodilwoods.daffodildb.server.sql99.ddl.descriptors.*; 13 import com.daffodilwoods.daffodildb.server.sql99.ddl.utility.*; 14 18 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.*; 19 import com.daffodilwoods.database.resource.*; 20 21 public class CalculateDD { 22 23 String roleNameQuery = "select role_name from " + SystemTables.roles_TableName; 24 PreparedStatementGetter executerGetter; 25 26 public CalculateDD(_ServerSession serverSession) throws DException { 27 executerGetter = ( (DataDictionary) serverSession.getDataDictionary()).getPreparedStatementGetter(); 28 } 29 30 public Object [] getDependentAndAncestor(_ServerSession serverSession, PrivilegeDescriptor pd, ArrayList roleList) throws DException { 31 Object [] dependentsNancectors = getDependentAndAncestorPointA(serverSession, pd, roleList); 32 HashMap dep = (HashMap) dependentsNancectors[0]; 33 HashMap anc = (HashMap) dependentsNancectors[1]; 34 35 setDependentInHashMapPointC(serverSession, pd, dep); 36 37 setAncestorInHashMapPointC(serverSession, pd, anc); 38 39 dependentsNancectors[0] = dep.size() == 0 ? null : dep; 40 dependentsNancectors[1] = anc.size() == 0 ? null : anc; 41 return dependentsNancectors; 42 } 43 44 public Object [] getDependentAndAncestor(_ServerSession serverSession, RoleAuthorizationDescriptor rad, ArrayList roleList) throws DException { 45 Object [] dependentNancestor = new Object [2]; 46 HashMap dependents = new HashMap(); 47 HashMap ancestors = new HashMap(); 48 49 _SelectQueryIterator iter = SqlSchemaConstants.getIterator(serverSession, QueryGetter.dependentRoles, new Object [] {rad.role_name}); 50 if (iter.first()) { 51 do { 52 Object [] values = (Object []) iter.getObject(); 53 RoleAuthorizationDescriptor ddd = new RoleAuthorizationDescriptor(); 54 ddd.loadDataFromRecord(iter); 55 if (isConditionRoleSatisfied(serverSession, rad, ddd, roleList)) { 56 if (!dependents.containsKey(ddd)) { 57 dependents.put(ddd, null); 58 } 59 } 60 if (isConditionRoleSatisfied(serverSession, ddd, rad, roleList)) { 61 if (!ancestors.containsKey(ddd)) { 62 ancestors.put(ddd, null); 63 } 64 } 65 } while (iter.next()); 66 } 67 dependentNancestor[0] = dependents.size() == 0 ? null : dependents; 68 dependentNancestor[1] = ancestors.size() == 0 ? null : ancestors; 69 return dependentNancestor; 70 } 71 72 private Object [] getDependentAndAncestorPointA(_ServerSession serverSession, PrivilegeDescriptor pd, ArrayList roleList) throws DException { 73 Object [] dependentNancestor = new Object [3]; 74 HashMap dependent = new HashMap(); 75 HashMap ancestor = new HashMap(); 76 if (pd.getDescriptorType() == _Descriptor.TABLE_PRIVILEGE_DESCRIPTOR) { 77 TablePrivilegesDescriptor ppp = (TablePrivilegesDescriptor) pd; 78 Object [] parameters = new Object [] {ppp.object_name, ppp.object_schema, ppp.object_catalog, ppp.privilege_type}; 79 _SelectQueryIterator iter = (_SelectQueryIterator) executerGetter.getExecuterTablePrivilegeDescriptorDependent_A().execute(parameters); 80 dependentNancestor[2] = new Integer (_PDCharacterstics.tableprivilegedescriptor); 81 82 if (iter.first()) { 83 do { 84 TablePrivilegesDescriptor ddd = new TablePrivilegesDescriptor(); 85 duplicatecode(serverSession, roleList, dependent, ancestor, ppp, ddd, iter); 86 } while (iter.next()); 87 } 88 } else if (pd.getDescriptorType() == _Descriptor.COLUMN_PRIVILEGE_DESCRIPTOR) { 89 ColumnPrivilegeDescriptor ppp = (ColumnPrivilegeDescriptor) pd; 90 Object [] parameters = new Object [] {ppp.object_name, ppp.object_schema, ppp.object_catalog, ppp.column_name, ppp.privilege_type}; 91 _SelectQueryIterator iter = (_SelectQueryIterator) executerGetter.getExecuterColumnPrivilegeDescriptorDependent_A().execute(parameters); 92 dependentNancestor[2] = new Integer (_PDCharacterstics.columnprivilegedescriptor); 93 94 if (iter.first()) { 95 do { 96 ColumnPrivilegeDescriptor ddd = new ColumnPrivilegeDescriptor(); 97 duplicatecode(serverSession, roleList, dependent, ancestor, ppp, ddd, iter); 98 } while (iter.next()); 99 } 100 } else if (pd.getDescriptorType() == _Descriptor.ROUTINE_PRIVILEGES_DESCRIPTOR) { 101 RoutinePrivilegeDescriptor ppp = (RoutinePrivilegeDescriptor) pd; 102 Object [] parameters = new Object [] {ppp.object_name, ppp.object_schema, ppp.object_catalog, ppp.privilege_type}; 103 _SelectQueryIterator iter = (_SelectQueryIterator) executerGetter.getExecuterRoutinePrivilegeDescriptorDependent_A().execute(parameters); 104 dependentNancestor[2] = new Integer (_PDCharacterstics.routineprivilegedescriptor); 105 106 if (iter.first()) { 107 do { 108 RoutinePrivilegeDescriptor ddd = new RoutinePrivilegeDescriptor(); 109 duplicatecode(serverSession, roleList, dependent, ancestor, ppp, ddd, iter); 110 } while (iter.next()); 111 } 112 } else { UsagePrivilegesDescriptor ppp = (UsagePrivilegesDescriptor) pd; 114 Object [] parameters = new Object [] {ppp.object_name, ppp.object_schema, ppp.object_catalog, ppp.object_type}; 115 _SelectQueryIterator iter = (_SelectQueryIterator) executerGetter.getExecuterUsagePrivilegeDescriptorDependent_A().execute(parameters); 116 dependentNancestor[2] = new Integer (_PDCharacterstics.usageprivilegedescriptor); 117 118 if (iter.first()) { 119 do { 120 UsagePrivilegesDescriptor ddd = new UsagePrivilegesDescriptor(); 121 duplicatecode(serverSession, roleList, dependent, ancestor, ppp, ddd, iter); 122 } while (iter.next()); 123 } 124 } 125 dependentNancestor[0] = dependent; 126 dependentNancestor[1] = ancestor; 127 return dependentNancestor; 128 } 129 130 private void duplicatecode(_ServerSession serverSession, ArrayList roleList, HashMap dependent, 131 HashMap ancestor, PrivilegeDescriptor ppp, 132 PrivilegeDescriptor ddd, 133 _SelectQueryIterator iter) throws DException { 134 Object [] values = (Object []) iter.getObject(); 135 ddd.loadDataFromRecord(iter); 136 if (! (ppp.getGrantee().equalsIgnoreCase(ddd.getGrantee()) && 137 (ppp.getGrantor().equalsIgnoreCase(ddd.getGrantor())))) { 138 if (isConditionA2satisfied(serverSession, ppp, ddd, roleList)) { 139 if (!dependent.containsKey(ddd)) { 140 dependent.put(ddd, null); 141 } 142 } 143 if (isConditionA2satisfied(serverSession, ddd, ppp, roleList)) { 144 if (!ancestor.containsKey(ddd)) { 145 ancestor.put(ddd, null); 146 } 147 } 148 } 149 } 150 151 private Object [] getDependentAndAncestorPointC(_ServerSession serverSession, PrivilegeDescriptor pd) throws DException { 152 Object [] dependentNancestor = new Object [2]; 153 HashMap dep = new HashMap(); 154 HashMap anc = new HashMap(); 155 setDependentInHashMapPointC(serverSession, pd, dep); 156 setAncestorInHashMapPointC(serverSession, pd, anc); 157 dependentNancestor[0] = dep; 158 dependentNancestor[1] = anc; 159 return dependentNancestor; 160 } 161 162 private void setDependentInHashMapPointC(_ServerSession serverSession, PrivilegeDescriptor pd, HashMap existingDependent) throws DException { 163 if (pd instanceof ColumnPrivilegeDescriptor) { 164 ColumnPrivilegeDescriptor ppp = (ColumnPrivilegeDescriptor) pd; 165 if (ppp.privilege_type.equalsIgnoreCase(SqlKeywords.REFERENCES)) { 166 _SelectQueryIterator iter = (_SelectQueryIterator) executerGetter.getExecuterPrivilegeDescriptorDependents_C().execute(new Object [] {ppp.getGrantee(), ppp.getGrantee()}); 167 if (iter.first()) { 168 do { 169 Object [] values = (Object []) iter.getObject(); 170 UsagePrivilegesDescriptor ddd = new UsagePrivilegesDescriptor(); 171 ddd.loadDataFromRecord(iter); 172 173 _SelectQueryIterator tempIter = (_SelectQueryIterator) executerGetter.getExecuterDomainCheckConstraints().execute(new Object [] {ddd.object_name, ddd.object_schema, ddd.object_catalog}); 174 if (tempIter.first()) { 175 do { 176 Object [] tempValues = (Object []) tempIter.getObject(); 177 CheckConstraintDescriptor tempCheckConstraintDesc = new CheckConstraintDescriptor(); 178 tempCheckConstraintDesc.loadDataFromRecord(iter); 179 if (isSearchConditionConitionContainsColumnName(ppp, tempCheckConstraintDesc)) { 180 if (!existingDependent.containsKey(ddd)) { 181 existingDependent.put(ddd, null); 182 } 183 } 184 } while (tempIter.next()); 185 } 186 } while (iter.next()); 187 } 188 } 189 } else if (pd instanceof UsagePrivilegesDescriptor) { 190 UsagePrivilegesDescriptor ppp = (UsagePrivilegesDescriptor) pd; 191 _SelectQueryIterator iter = (_SelectQueryIterator) executerGetter.getExecuterPrivilegeDescriptorDependents_C().execute(new Object [] {ppp.getGrantee(), ppp.getGrantee()}); 192 if (iter.first()) { 193 do { 194 Object [] values = (Object []) iter.getObject(); 195 UsagePrivilegesDescriptor ddd = new UsagePrivilegesDescriptor(); 196 ddd.loadDataFromRecord(iter); 197 198 _SelectQueryIterator tempIter = (_SelectQueryIterator) executerGetter.getExecuterDomainCheckConstraints().execute(new Object [] {ddd.object_name, ddd.object_schema, ddd.object_catalog}); 199 if (tempIter.first()) { 200 do { 201 Object [] tempValues = (Object []) tempIter.getObject(); 202 CheckConstraintDescriptor tempCheckConstraintDesc = new CheckConstraintDescriptor(); 203 tempCheckConstraintDesc.loadDataFromRecord(tempIter); 204 if (isSearchConditionConitionContainsUsageObject(ppp, tempCheckConstraintDesc)) { 205 if (!existingDependent.containsKey(ddd)) { 206 existingDependent.put(ddd, null); 207 } 208 } 209 } while (tempIter.next()); 210 } 211 } while (iter.next()); 212 } 213 } 214 } 215 216 private HashMap getAncestorPointB(_ServerSession serverSession, PrivilegeDescriptor pd) throws DException { 217 return null; 218 } 219 220 private void setAncestorInHashMapPointC(_ServerSession serverSession, PrivilegeDescriptor pd, HashMap ancestors) throws DException { 221 if (ancestors == null) { 222 ancestors = new HashMap(); 223 } 224 if (pd instanceof UsagePrivilegesDescriptor) { 225 UsagePrivilegesDescriptor ddd = (UsagePrivilegesDescriptor) pd; 226 if (ddd.getGrantor().equalsIgnoreCase(SqlSchemaConstants.SYSTEM) && ddd.object_type.equalsIgnoreCase(SqlKeywords.DOMAIN)) { 227 _SelectQueryIterator tempiter = (_SelectQueryIterator) executerGetter.getExecuterDomainCheckConstraints().execute(new Object [] {ddd.object_name, ddd.object_schema, ddd.object_catalog}); 228 if (tempiter.first()) { 229 ArrayList ccd = new ArrayList(); 230 do { 231 Object [] values = (Object []) tempiter.getObject(); 232 CheckConstraintDescriptor tempccd = new CheckConstraintDescriptor(); 233 tempccd.loadDataFromRecord(tempiter); 234 ccd.add(tempccd); 235 } while (tempiter.next()); 236 237 _SelectQueryIterator iter1 = (_SelectQueryIterator) executerGetter.getExecuterUsagePrivilegeDescriptorAncestor_C_Column().execute(new Object [] {getDomainOwner(serverSession, new String [] {ddd.object_catalog, ddd.object_schema, ddd.object_name})}); 238 if (iter1.first()) { 239 do { 240 Object [] values = (Object []) iter1.getObject(); 241 ColumnPrivilegeDescriptor ppp = new ColumnPrivilegeDescriptor(); 242 ppp.loadDataFromRecord(iter1); 243 244 for (int i = 0, size = ccd.size(); i < size; i++) { 245 if (isSearchConditionConitionContainsColumnName(ppp, (CheckConstraintDescriptor) ccd.get(i))) { 246 if (!ancestors.containsKey(ppp)) { 247 ancestors.put(ppp, null); 248 } 249 } 250 } 251 } while (iter1.next()); 252 } 253 254 _SelectQueryIterator iter2 = (_SelectQueryIterator) executerGetter.getExecuterUsagePrivilegeDescriptorAncestor_C_Usage().execute(new Object [] {getDomainOwner(serverSession, new String [] {ddd.object_catalog, ddd.object_schema, ddd.object_name})}); 255 if (iter2.first()) { 256 do { 257 Object [] values = (Object []) iter2.getObject(); 258 UsagePrivilegesDescriptor ppp = new UsagePrivilegesDescriptor(); 259 ppp.loadDataFromRecord(iter2); 260 261 for (int i = 0, size = ccd.size(); i < size; i++) { 262 if (isSearchConditionConitionContainsUsageObject(ppp, (CheckConstraintDescriptor) ccd.get(i))) { 263 if (!ancestors.containsKey(ppp)) { 264 ancestors.put(ppp, null); 265 } 266 } 267 } 268 } while (iter2.next()); 269 } 270 } 271 } 272 } 273 } 274 275 public ArrayList getRoleNames(_ServerSession serverSession) throws DException { 276 ArrayList rolelist = new ArrayList(); 277 _SelectQueryIterator iter = SqlSchemaConstants.getIterator(serverSession, roleNameQuery, null); 278 if (iter.first()) { 279 do { 280 rolelist.add( ( (Object []) iter.getObject())[0]); 281 } while (iter.next()); 282 } 283 return rolelist.size() == 0 ? null : rolelist; 284 } 285 286 private boolean isRoleName(String role, ArrayList roleList) { 287 if (roleList == null) { 288 return false; 289 } 290 for (int i = 0, size = roleList.size(); i < size; i++) { 291 if (roleList.get(i).toString().equalsIgnoreCase(role)) { 292 return true; 293 } 294 } 295 return false; 296 } 297 298 private boolean applicableRoles(_ServerSession serverSession, String roleName, String checkRoleName) throws DException { 299 TreeMap applicableRoles = GeneralUtility.getApplicableRoles(serverSession, roleName); 300 return applicableRoles.containsKey(checkRoleName); 301 } 302 303 private boolean isConditionA2satisfied(_ServerSession serverSession, PrivilegeDescriptor ppp, PrivilegeDescriptor ddd, ArrayList roleList) throws DException { 304 return ( (ppp.is_grantable.equalsIgnoreCase(SqlSchemaConstants.YES)) 305 && (ppp.getGrantee().equalsIgnoreCase(ddd.getGrantor()) 306 || ppp.getGrantee().equalsIgnoreCase(SqlKeywords.PUBLIC) 307 || (isRoleName(ddd.getGrantor(), roleList) && applicableRoles(serverSession, ddd.getGrantor(), ppp.getGrantee())))); 308 } 309 310 private boolean isConditionRoleSatisfied(_ServerSession serverSession, RoleAuthorizationDescriptor rad, RoleAuthorizationDescriptor ddd, ArrayList roleList) throws DException { 311 return ( (rad.is_grantable.equalsIgnoreCase(SqlSchemaConstants.YES)) 312 && (rad.grantee.equalsIgnoreCase(ddd.grantor) || rad.grantee.equalsIgnoreCase(SqlKeywords.PUBLIC) 313 || (isRoleName(ddd.grantor, roleList) && applicableRoles(serverSession, ddd.grantor, rad.grantee)))); 314 315 } 316 317 private boolean isOwnerOfDomain(_ServerSession serverSession, String user, Object [] obj) throws DException { 318 return false; 319 } 320 321 private String getDomainOwner(_ServerSession serverSession, String [] obj) throws DException { 322 _SelectQueryIterator iter = SqlSchemaConstants.getIterator(serverSession, QueryGetter.usageObjectOwner, new Object [] {"DOMAIN", obj[2], obj[1], obj[0]}); 323 String owner; 324 if (iter.first()) { 325 do { 326 owner = (String ) ( (Object []) iter.getObject())[0]; 327 } while (iter.next()); 328 return owner; 329 } 330 return null; 331 } 332 333 private boolean isSearchConditionConitionContainsColumnName(ColumnPrivilegeDescriptor cpd, CheckConstraintDescriptor ccd) { 334 return false; 335 } 336 337 private boolean isSearchConditionConitionContainsUsageObject(UsagePrivilegesDescriptor upd, CheckConstraintDescriptor ccd) { 338 return false; 339 } 340 341 public void print_privilege_descriptor(PrivilegeDescriptor pd) { 342 if (pd instanceof TablePrivilegesDescriptor) { 343 ; } else if (pd instanceof ColumnPrivilegeDescriptor) { 345 ; } else if (pd instanceof UsagePrivilegesDescriptor) { 347 ; } else if (pd instanceof RoutinePrivilegeDescriptor) { 349 ; } 351 } 352 353 354 } 355 | Popular Tags |