/**
* This toString-Method works for every Class, where you want to display all the fields and its values
*/
public String toString() {
StringBuffer sb = new StringBuffer();
Field[] fields = getClass().getDeclaredFields(); //Get all fields incl. private ones
for (Field field : fields){
try {
field.setAccessible(true);
String key=field.getName();
String value;
try{
value = (String) field.get(this);
} catch (ClassCastException e){
value="";
}
sb.append(key).append(": ").append(value).append("\n");
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return sb.toString();
}
AFAIK необходимо сделать объект предоставлений по одному.
Обычно Вы использовали бы сценарий, чтобы сделать это, что-то вроде:
SELECT 'GRANT ALL ON '||table_name||' TO BOB;'
FROM ALL_TABLES
WHERE OWNER = 'ALICE';
И подобный для других объектов дб.
Вы могли поместить пакет в каждую схему, что необходимо выпустить предоставление, от которого пройдет весь вызов каждый оператор GRANT через ВЫПОЛНЕНИЕ НЕПОСРЕДСТВЕННОГО.
, например,
PROCEDURE GRANT_TABLES
IS
BEGIN
FOR tab IN (SELECT table_name
FROM all_tables
WHERE owner = this_user) LOOP
EXECUTE IMMEDIATE 'GRANT SELECT, INSERT, UPDATE, DELETE ON '||tab.table_name||' TO other_user';
END LOOP;
END;
Существует много вещей рассмотреть. Когда Вы говорите, что доступ, хотите снабдить префиксом таблицы другое пользовательское имя? Можно использовать общедоступные синонимы так, чтобы можно было скрыть первоначального владельца, если это - проблема. И затем предоставьте privs на синониме.
Вы также хотите запланировать заранее как лучше всего, Вы можете. Позже, Вы захотите, чтобы Frank смог получить доступ к схеме Alice также? Вы не хотите должными быть повторно предоставлять полномочия на количестве N таблиц. Используя роль базы данных было бы лучшее решение. Предоставьте выбор роли "ALICE_TABLES", например, и когда другому пользователю нужен доступ, просто предоставьте им полномочие роли. Это помогает организовать предоставления, которые Вы делаете в DB.
Другое решение, если у вас другой владелец:
BEGIN
FOR x IN (SELECT owner||'.'||table_name ownertab
FROM all_tables
WHERE owner IN ('A', 'B', 'C', 'D'))
LOOP
EXECUTE IMMEDIATE 'GRANT SELECT ON '||x.ownertab||' TO other_user';
END LOOP;
END;