@Override public int update() { session.getUser().checkAdmin(); session.commit(true); Database db = session.getDatabase(); if (db.findRole(userName) != null) { throw DbException.get(ErrorCode.ROLE_ALREADY_EXISTS_1, userName); } if (db.findUser(userName) != null) { if (ifNotExists) { return 0; } throw DbException.get(ErrorCode.USER_ALREADY_EXISTS_1, userName); } int id = getObjectId(); User user = new User(db, id, userName, false); user.setAdmin(admin); user.setComment(comment); if (hash != null && salt != null) { setSaltAndHash(user, session, salt, hash); } else if (password != null) { setPassword(user, session, password); } else { throw DbException.throwInternalError(); } db.addDatabaseObject(session, user); return 0; }
case CommandInterface.ALTER_USER_SET_PASSWORD: if (user != session.getUser()) { session.getUser().checkAdmin(); session.getUser().checkAdmin(); if (db.findUser(newName) != null || newName.equals(user.getName())) { throw DbException.get(ErrorCode.USER_ALREADY_EXISTS_1, newName); break; case CommandInterface.ALTER_USER_ADMIN: session.getUser().checkAdmin(); if (!admin) { user.checkOwnsNoSchemas(); user.setAdmin(admin); break; default:
private void checkRights() { if (insertCommand != null) { session.getUser().checkRight(targetTable, Right.INSERT); } if (updateCommand != null) { session.getUser().checkRight(targetTable, Right.UPDATE); } if (deleteCommand != null) { session.getUser().checkRight(targetTable, Right.DELETE); } // check the underlying tables session.getUser().checkRight(targetTable, Right.SELECT); session.getUser().checkRight(sourceTableFilter.getTable(), Right.SELECT); }
@Override public void removeChildrenAndResources(Session session) { for (Right right : database.getAllRights()) { if (right.getGrantee() == this) { database.removeDatabaseObject(session, right); } } database.removeMeta(session, getId()); salt = null; Arrays.fill(passwordHash, (byte) 0); passwordHash = null; invalidate(); }
/** * Set the password for the given user. * * @param user the user * @param session the session * @param password the password */ static void setPassword(User user, Session session, Expression password) { String pwd = password.optimize(session).getValue(session).getString(); char[] passwordChars = pwd == null ? new char[0] : pwd.toCharArray(); byte[] userPasswordHash; String userName = user.getName(); if (userName.length() == 0 && passwordChars.length == 0) { userPasswordHash = new byte[0]; } else { userPasswordHash = SHA256.getKeyPasswordHash(userName, passwordChars); } user.setUserPasswordHash(userPasswordHash); }
/** * Add an object to the database. * * @param session the session * @param obj the object to add */ public synchronized void addDatabaseObject(Session session, DbObject obj) { int id = obj.getId(); if (id > 0 && !starting) { checkWritingAllowed(); } HashMap<String, DbObject> map = getMap(obj.getType()); if (obj.getType() == DbObject.USER) { User user = (User) obj; if (user.isAdmin() && systemUser.getName().equals(SYSTEM_USER_NAME)) { systemUser.rename(user.getName()); } } String name = obj.getName(); if (SysProperties.CHECK && map.get(name) != null) { DbException.throwInternalError("object already exists"); } lockMeta(session); addMeta(session, obj); map.put(name, obj); }
user = new User(database, database.allocateObjectId(), ci.getUserName(), false); user.setAdmin(true); user.setUserPasswordHash(ci.getUserPasswordHash()); database.setMasterUser(user); user = database.findUser(ci.getUserName()); if (user != null) { if (!user.validateUserPasswordHash(ci.getUserPasswordHash())) { user = null; if (opened && (user == null || !user.isAdmin())) {
boolean admin = session.getUser().isAdmin(); switch (type) { case TABLES: { "" + s.getId() ); add(rows, identifier(u.getName()), String.valueOf(u.isAdmin()), replaceNullWithEmpty(u.getComment()), "" + u.getId() ); if (admin || session.getUser().isRoleGranted(r)) { add(rows, identifier(schema.getOwner().getName()), s.getUser().getName(),
case SET_PASSWORD: if (user != session.getUser()) { session.getUser().checkAdmin(); user.setSaltAndHash(getByteArray(salt), getByteArray(hash)); } else { String name = newName == null ? user.getName() : newName; SHA256 sha = new SHA256(); char[] passwordChars = getCharArray(password); byte[] userPasswordHash = sha.getKeyPasswordHash(name, passwordChars); user.setUserPasswordHash(userPasswordHash); session.getUser().checkAdmin(); if (db.findUser(newName) != null || newName.equals(user.getName())) { throw Message.getSQLException(ErrorCode.USER_ALREADY_EXISTS_1, newName); break; case ADMIN: session.getUser().checkAdmin(); if (!admin) { user.checkOwnsNoSchemas(); user.setAdmin(admin); break; default:
public int update() throws SQLException { session.getUser().checkAdmin(); session.commit(true); Database db = session.getDatabase(); if (db.findRole(userName) != null) { throw Message.getSQLException(ErrorCode.ROLE_ALREADY_EXISTS_1, userName); } if (db.findUser(userName) != null) { if (ifNotExists) { return 0; } throw Message.getSQLException(ErrorCode.USER_ALREADY_EXISTS_1, userName); } int id = getObjectId(false, true); User user = new User(db, id, userName, false); user.setAdmin(admin); user.setComment(comment); if (hash != null && salt != null) { user.setSaltAndHash(getByteArray(salt), getByteArray(hash)); } else { SHA256 sha = new SHA256(); char[] passwordChars = getCharArray(password); byte[] userPasswordHash = sha.getKeyPasswordHash(userName, passwordChars); user.setUserPasswordHash(userPasswordHash); } db.addDatabaseObject(session, user); return 0; }
@Override public int update() { session.getUser().checkAdmin(); session.commit(true); Database db = session.getDatabase(); User user = db.findUser(userName); if (user == null) { if (!ifExists) { throw DbException.get(ErrorCode.USER_NOT_FOUND_1, userName); } } else { if (user == session.getUser()) { int adminUserCount = 0; for (User u : db.getAllUsers()) { if (u.isAdmin()) { adminUserCount++; } } if (adminUserCount == 1) { throw DbException.get(ErrorCode.CANNOT_DROP_CURRENT_USER); } } user.checkOwnsNoSchemas(); db.removeDatabaseObject(session, user); } return 0; }
user = new User(database, database.allocateObjectId(false, true), ci.getUserName(), false); user.setAdmin(true); user.setUserPasswordHash(ci.getUserPasswordHash()); database.setMasterUser(user); user = database.findUser(ci.getUserName()); if (user != null) { if (!user.validateUserPasswordHash(ci.getUserPasswordHash())) { user = null; if (opened && (user == null || !user.getAdmin())) {
@Override public int update() { String name = fileNameExpr.getValue(session).getString(); session.getUser().checkAdmin(); backupTo(name); return 0; }
@Override public ResultInterface query(int maxrows) { session.getUser().checkAdmin(); reset(); Database db = session.getDatabase(); add(user.getCreateSQL(passwords), false);
systemUser = new User(this, 0, SYSTEM_USER_NAME, true); mainSchema = new Schema(this, 0, Constants.SCHEMA_MAIN, systemUser, true); infoSchema = new Schema(this, -1, "INFORMATION_SCHEMA", systemUser, true); publicRole = new Role(this, 0, Constants.PUBLIC_ROLE_NAME, true); roles.put(Constants.PUBLIC_ROLE_NAME, publicRole); systemUser.setAdmin(true); systemSession = new Session(this, systemUser, ++nextSessionId); lobSession = new Session(this, systemUser, ++nextSessionId);
@Override public String toString() { return "#" + serialId + " (user: " + user.getName() + ")"; }
add(rows, new String[]{"info.VERSION_MINOR", "" + Constants.VERSION_MINOR}); add(rows, new String[]{"info.VERSION", "" + Constants.getFullVersion()}); if (session.getUser().getAdmin()) { String[] settings = new String[]{ "java.runtime.version", if (dataFile != null) { add(rows, new String[] { "CACHE_TYPE", dataFile.getCache().getTypeName() }); if (session.getUser().getAdmin()) { add(rows, new String[]{"info.FILE_DISK_WRITE", "" + dataFile.getWriteCount()}); add(rows, new String[]{"info.FILE_DISK_READ", "" + dataFile.getReadCount()}); User u = (User) users.get(i); add(rows, new String[] { identifier(u.getName()), // NAME String.valueOf(u.getAdmin()), // ADMIN replaceNullWithEmpty(u.getComment()), // REMARKS "" + u.getId() // }); identifier(schema.getOwner().getName()), // SCHEMA_OWNER boolean admin = session.getUser().getAdmin(); for (int i = 0; i < sessions.length; i++) { Session s = sessions[i]; add(rows, new String[] { "" + s.getId(), // ID s.getUser().getName(), // USER_NAME
@Override public String getCreateSQL() { if (system) { return null; } return "CREATE SCHEMA IF NOT EXISTS " + getSQL() + " AUTHORIZATION " + owner.getSQL(); }
case USER: case CURRENT_USER: result = ValueString.get(session.getUser().getName(), database.getMode().treatEmptyStringsAsNull); break; session.getUser().checkAdmin(); result = ValueInt.get(Utils.getMemoryFree()); break; case MEMORY_USED: session.getUser().checkAdmin(); result = ValueInt.get(Utils.getMemoryUsed()); break;
@Override public String getCreateSQL() { return getCreateSQL(true); }