[Schmitzm-commits] r1634 - trunk/schmitzm-core/src/main/java/de/schmitzm/geotools/postgres
scm-commit@wald.intevation.org
scm-commit at wald.intevation.org
Thu Jul 21 11:13:27 CEST 2011
Author: alfonx
Date: 2011-07-21 11:13:27 +0200 (Thu, 21 Jul 2011)
New Revision: 1634
Modified:
trunk/schmitzm-core/src/main/java/de/schmitzm/geotools/postgres/PGUtil.java
Log:
grant and revoke privigleges to roles in PGUtil
Modified: trunk/schmitzm-core/src/main/java/de/schmitzm/geotools/postgres/PGUtil.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/geotools/postgres/PGUtil.java 2011-07-18 21:17:34 UTC (rev 1633)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/geotools/postgres/PGUtil.java 2011-07-21 09:13:27 UTC (rev 1634)
@@ -10,20 +10,75 @@
import de.schmitzm.lang.LangUtil;
/**
- * Hilfsmethoden für PostgreSQL
+ * Hilfsmethoden für PostgreSQL. Die Dependency soll nur {@link Connection} sein. In Hibernate kann über #doWork eine
+ * {@link Connection} erhalten werden.
*/
public class PGUtil {
static final Logger log = Logger.getLogger(PGUtil.class);
/**
- * Querys the <code>geometry_columns</code> table is part of every postgis
- * installation and must/should describe the geometry columns and tables.
+ * PostgreSQL Privilegien die per Grant einer Tabelle zugeordnet werden können.<br/>
+ *
+ * @see http://www.postgresql.org/docs/9.1/static/sql-grant.html
*/
+ enum Privileges {
+ SELECT, INSERT, UPDATE, DELETE, REFERENCES, TEMPORARY, ALL_PRIVILEGES("ALL PRIVILEGES");
+
+ String sql;
+
+ Privileges() {
+ this.sql = this.toString();
+ }
+
+ Privileges(String sql) {
+ this.sql = sql;
+ }
+ }
+
+ /**
+ * Fügt Privilegien für eine Rolle einer Tabelle hinzu.
+ *
+ * @param tablename
+ * Tabellennamen, optional mit "schema.tablename"
+ * @param targetRole
+ * Darf PUBLIC sein, oder Name einer ROLLE.
+ * @param privileges
+ * List der zuzuordnenden Privilegien
+ * @throws SQLException
+ */
+ public void grantPrivilegesOnTable(Connection c, String tablename, String targetRole, Privileges... privileges)
+ throws SQLException {
+ // GRANT SELECT, UPDATE, INSERT ON mytable TO admin;
+ String sql = "GRANT " + LangUtil.stringConcatWithSep(",", (Object[]) privileges) + " ON " + tablename + " TO "
+ + targetRole;
+ c.createStatement().executeUpdate(sql);
+ }
+
+ /**
+ * Entfernt Privilegien für eine Rolle von einre Tabelle.
+ *
+ * @param tablename
+ * Tabellennamen, optional mit "schema.tablename"
+ * @param privileges
+ * List der zuzuordnenden Privilegien
+ * @throws SQLException
+ */
+ public void revokePrivilegesOnTable(Connection c, String tablename, String targetRole, Privileges... privileges)
+ throws SQLException {
+ // GRANT SELECT, UPDATE, INSERT ON mytable TO admin;
+ String sql = "REVOKE " + LangUtil.stringConcatWithSep(",", (Object[]) privileges) + " ON " + tablename
+ + " FROM " + targetRole;
+ c.createStatement().executeUpdate(sql);
+ }
+
+ /**
+ * Querys the <code>geometry_columns</code> table is part of every POSTGIS installation and must/should describe the
+ * geometry columns and tables.
+ */
static public String[] getColumnsDescribedInGeometryColumnsTable(Statement s) {
String[] columns = new String[0];
try {
- ResultSet askGeoe = s
- .executeQuery("SELECT f_table_name FROM geometry_columns;");
+ ResultSet askGeoe = s.executeQuery("SELECT f_table_name FROM geometry_columns;");
while (askGeoe.next()) {
columns = LangUtil.extendArray(columns, askGeoe.getString(1));
}
@@ -42,16 +97,10 @@
* @param geoColumnName
* @param srid
*/
- public static void createOrUpdateGeometrsColumnsEntry(String tableName,
- String geoColumnName, int srid) {
+ public static void createOrUpdateGeometrsColumnsEntry(String tableName, String geoColumnName, int srid) {
String createGeometryEntrySQL = "INSERT INTO geometry_columns (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, coord_dimension, srid, \"type\") VALUES ( '', 'public', '"
- + tableName
- + "', '"
- + geoColumnName
- + "', 2, "
- + srid
- + ",'MULTIPOLYGON' ) LIMIT 1;";
+ + tableName + "', '" + geoColumnName + "', 2, " + srid + ",'MULTIPOLYGON' ) LIMIT 1;";
}
// TODO isGeoColumn();
@@ -59,8 +108,8 @@
/**
* @param binding
* Eine "einfache" Javaklasse, die in PG abgebildet werden soll.
- * @return einen PG-spezifischen Datentypenamen für einen Javatyp zurück,
- * z.b. "double precision" für <code>Double.class</code>
+ * @return einen PG-spezifischen Datentypenamen für einen Javatyp zurück, z.b. "double precision" für
+ * <code>Double.class</code>
*/
public static String getColTypeName(Class<?> binding) {
@@ -74,17 +123,17 @@
return "bigint";
}
- throw new RuntimeException("DB Type mapping for " + binding
- + " not yet implemented.");
+ throw new RuntimeException("DB Type mapping for " + binding + " not yet implemented.");
}
-
+
/**
- * Legt ein Schema an, wenn es vorher nicht existierte.
+ * Legt ein Schema an, wenn es vorher nicht existierte.
+ *
* @return <code>true</code> wenn das Schema neu angelegt wurde.
*/
public static boolean createSchemaIfNotExists(Connection c, String schemaname) throws SQLException {
if (!existsSchema(c, schemaname)) {
- c.createStatement().execute("create schema "+schemaname);
+ c.createStatement().execute("create schema " + schemaname);
return true;
}
return false;
@@ -94,7 +143,8 @@
* Liefert <code>true</code> wenn ein Schema mit dem Namen in der PG Datenbank existiert.
*/
public static boolean existsSchema(Connection c, String schemaname) throws SQLException {
- ResultSet rs = c.createStatement().executeQuery("select 1 from pg_catalog.pg_namespace where nspname = '"+schemaname+"'");
+ ResultSet rs = c.createStatement().executeQuery(
+ "select 1 from pg_catalog.pg_namespace where nspname = '" + schemaname + "'");
return rs.next();
}
}
More information about the Schmitzm-commits
mailing list