diff --git a/server/bundles/io.cloudbeaver.server/db/cb-schema-create.sql b/server/bundles/io.cloudbeaver.server/db/cb-schema-create.sql index 0133e18035..2bedb9e1f1 100644 --- a/server/bundles/io.cloudbeaver.server/db/cb-schema-create.sql +++ b/server/bundles/io.cloudbeaver.server/db/cb-schema-create.sql @@ -9,18 +9,18 @@ CREATE TABLE CB_SERVER( ); CREATE TABLE CB_AUTH_SUBJECT( - SUBJECT_ID VARCHAR(64) NOT NULL, + SUBJECT_ID VARCHAR(128) NOT NULL, SUBJECT_TYPE VARCHAR(8) NOT NULL, PRIMARY KEY(SUBJECT_ID) ); CREATE TABLE CB_AUTH_PERMISSIONS( - SUBJECT_ID VARCHAR(32) NOT NULL, + SUBJECT_ID VARCHAR(128) NOT NULL, PERMISSION_ID VARCHAR(64) NOT NULL, GRANT_TIME TIMESTAMP NOT NULL, - GRANTED_BY VARCHAR(64) NOT NULL, + GRANTED_BY VARCHAR(128) NOT NULL, PRIMARY KEY(SUBJECT_ID,PERMISSION_ID), FOREIGN KEY(SUBJECT_ID) REFERENCES CB_AUTH_SUBJECT(SUBJECT_ID) ON DELETE CASCADE @@ -28,17 +28,17 @@ CREATE TABLE CB_AUTH_PERMISSIONS( CREATE TABLE CB_DATASOURCE_ACCESS( DATASOURCE_ID VARCHAR(128) NOT NULL, - SUBJECT_ID VARCHAR(32) NOT NULL, + SUBJECT_ID VARCHAR(128) NOT NULL, GRANT_TIME TIMESTAMP NOT NULL, - GRANTED_BY VARCHAR(64) NOT NULL, + GRANTED_BY VARCHAR(128) NOT NULL, PRIMARY KEY(SUBJECT_ID,DATASOURCE_ID), FOREIGN KEY(SUBJECT_ID) REFERENCES CB_AUTH_SUBJECT(SUBJECT_ID) ON DELETE CASCADE ); CREATE TABLE CB_USER( - USER_ID VARCHAR(64) NOT NULL, + USER_ID VARCHAR(128) NOT NULL, IS_ACTIVE CHAR(1) NOT NULL, CREATE_TIME TIMESTAMP NOT NULL, @@ -49,7 +49,7 @@ CREATE TABLE CB_USER( -- Additional user properties (profile) CREATE TABLE CB_USER_META( - USER_ID VARCHAR(64) NOT NULL, + USER_ID VARCHAR(128) NOT NULL, META_ID VARCHAR(32) NOT NULL, META_VALUE VARCHAR(1024), @@ -58,7 +58,7 @@ CREATE TABLE CB_USER_META( ); CREATE TABLE CB_ROLE( - ROLE_ID VARCHAR(32) NOT NULL, + ROLE_ID VARCHAR(128) NOT NULL, ROLE_NAME VARCHAR(100) NOT NULL, ROLE_DESCRIPTION VARCHAR(255) NOT NULL, @@ -69,11 +69,11 @@ CREATE TABLE CB_ROLE( ); CREATE TABLE CB_USER_ROLE( - USER_ID VARCHAR(64) NOT NULL, - ROLE_ID VARCHAR(32) NOT NULL, + USER_ID VARCHAR(128) NOT NULL, + ROLE_ID VARCHAR(128) NOT NULL, GRANT_TIME TIMESTAMP NOT NULL, - GRANTED_BY VARCHAR(32) NOT NULL, + GRANTED_BY VARCHAR(128) NOT NULL, PRIMARY KEY(USER_ID,ROLE_ID), FOREIGN KEY(USER_ID) REFERENCES CB_USER(USER_ID) ON DELETE CASCADE, @@ -97,7 +97,7 @@ CREATE TABLE CB_AUTH_CONFIGURATION( ); CREATE TABLE CB_USER_CREDENTIALS( - USER_ID VARCHAR(64) NOT NULL, + USER_ID VARCHAR(128) NOT NULL, PROVIDER_ID VARCHAR(32) NOT NULL, CRED_ID VARCHAR(32) NOT NULL, CRED_VALUE VARCHAR(1024) NOT NULL, @@ -109,7 +109,7 @@ CREATE TABLE CB_USER_CREDENTIALS( CREATE INDEX CB_USER_CREDENTIALS_SEARCH_IDX ON CB_USER_CREDENTIALS(PROVIDER_ID,CRED_ID); CREATE TABLE CB_USER_STATE( - USER_ID VARCHAR(64) NOT NULL, + USER_ID VARCHAR(128) NOT NULL, USER_CONFIGURATION TEXT NULL, @@ -121,7 +121,7 @@ CREATE TABLE CB_USER_STATE( CREATE TABLE CB_SESSION( SESSION_ID VARCHAR(64) NOT NULL, - USER_ID VARCHAR(64) NULL, + USER_ID VARCHAR(128) NULL, CREATE_TIME TIMESTAMP NOT NULL, LAST_ACCESS_REMOTE_ADDRESS NULL, diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBDatabase.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBDatabase.java index 798e19c201..d3bcaddf14 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBDatabase.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBDatabase.java @@ -172,6 +172,8 @@ public class CBDatabase { // Create new admin user if (!CommonUtils.isEmpty(adminName) && !CommonUtils.isEmpty(adminPassword)) { createAdminUser(adminName, adminPassword); + } else { + grantAdminPermissionsToUser(adminName); } } @@ -344,16 +346,21 @@ public class CBDatabase { serverController.setUserCredentials(adminUser.getUserId(), authProvider, credentials); } - // Grant all roles - WebRole[] allRoles = serverController.readAllRoles(); - serverController.setUserRoles( - adminUser.getUserId(), - Arrays.stream(allRoles).map(WebRole::getRoleId).toArray(String[]::new), - adminUser.getUserId()); + grantAdminPermissionsToUser(adminUser.getUserId()); return adminUser; } + private void grantAdminPermissionsToUser(String userId) throws DBCException { + // Grant all roles + DBWSecurityController securityController = application.getSecurityController(); + WebRole[] allRoles = securityController.readAllRoles(); + securityController.setUserRoles( + userId, + Arrays.stream(allRoles).map(WebRole::getRoleId).toArray(String[]::new), + userId); + } + void shutdown() { log.debug("Shutdown database"); if (cbDataSource != null) { diff --git a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/impl/WebServiceAdmin.java b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/impl/WebServiceAdmin.java index cd229569c8..0c1a5e59ca 100644 --- a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/impl/WebServiceAdmin.java +++ b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/impl/WebServiceAdmin.java @@ -298,10 +298,18 @@ public class WebServiceAdmin implements DBWServiceAdmin { appConfig.setAnonymousAccessEnabled(config.isAnonymousAccessEnabled()); appConfig.setAuthenticationEnabled(config.isAuthenticationEnabled()); appConfig.setSupportsCustomConnections(config.isCustomConnectionsEnabled()); + String adminName = config.getAdminName(); + String adminPassword = config.getAdminPassword(); + if (CommonUtils.isEmpty(adminName)) { + // Grant admin permissions to the current user + WebUser curUser = webSession.getUser(); + adminName = curUser == null ? null : curUser.getUserId(); + adminPassword = null; + } CBApplication.getInstance().finishConfiguration( config.getServerName(), - config.getAdminName(), - config.getAdminPassword(), + adminName, + adminPassword, config.getSessionExpireTime(), appConfig); // Refresh active session