Skip to content

Commit cb5072a

Browse files
committed
Output warning in case of connecting as SYSDBA/SYSOPER
1 parent 4207834 commit cb5072a

File tree

3 files changed

+27
-1
lines changed

3 files changed

+27
-1
lines changed

src/main/java/org/utplsql/cli/ConnectionConfig.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,10 @@ public String getPassword() {
4545
public String getConnectString() {
4646
return user + "/" + password + "@" + connect;
4747
}
48+
49+
public boolean isSysDba() {
50+
return user != null &&
51+
(user.toLowerCase().endsWith(" as sysdba")
52+
|| user.toLowerCase().endsWith(" as sysoper"));
53+
}
4854
}

src/main/java/org/utplsql/cli/DataSourceProvider.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public static DataSource getDataSource(ConnectionInfo info, int maxConnections )
2626
requireOjdbc();
2727

2828
ConnectionConfig config = new ConnectionConfig(info.getConnectionString());
29+
warnIfSysDba(config);
2930

3031
HikariDataSource pds = new TestedDataSourceProvider(config).getDataSource();
3132
pds.setAutoCommit(false);
@@ -43,4 +44,10 @@ private static void requireOjdbc() {
4344
throw new RuntimeException("Can't run utPLSQL-cli without Oracle JDBC driver");
4445
}
4546
}
47+
48+
private static void warnIfSysDba(ConnectionConfig config) {
49+
if ( config.isSysDba() ) {
50+
System.out.println("WARNING: You are connecting to the database as SYSDBA or SYSOPER, which is NOT RECOMMENDED and can put your database at risk!");
51+
}
52+
}
4653
}

src/test/java/org/utplsql/cli/ConnectionConfigTest.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import org.junit.jupiter.api.Test;
44

5-
import static org.junit.jupiter.api.Assertions.assertEquals;
5+
import static org.junit.jupiter.api.Assertions.*;
66

77
public class ConnectionConfigTest {
88

@@ -13,6 +13,7 @@ void parse() {
1313
assertEquals("test", info.getUser());
1414
assertEquals("pw", info.getPassword());
1515
assertEquals("my.local.host/service", info.getConnect());
16+
assertFalse(info.isSysDba());
1617
}
1718

1819
@Test
@@ -22,6 +23,16 @@ void parseSysDba() {
2223
assertEquals("sys as sysdba", info.getUser());
2324
assertEquals("pw", info.getPassword());
2425
assertEquals("my.local.host/service", info.getConnect());
26+
assertTrue(info.isSysDba());
27+
}
28+
@Test
29+
void parseSysOper() {
30+
ConnectionConfig info = new ConnectionConfig("myOperUser as sysoper/[email protected]/service");
31+
32+
assertEquals("myOperUser as sysoper", info.getUser());
33+
assertEquals("passw0rd", info.getPassword());
34+
assertEquals("my.local.host/service", info.getConnect());
35+
assertTrue(info.isSysDba());
2536
}
2637

2738
@Test
@@ -31,6 +42,7 @@ void parseSpecialCharsPW() {
3142
assertEquals("test", info.getUser());
3243
assertEquals("p@ssw0rd=", info.getPassword());
3344
assertEquals("my.local.host/service", info.getConnect());
45+
assertFalse(info.isSysDba());
3446
}
3547

3648
@Test
@@ -40,5 +52,6 @@ void parseSpecialCharsUser() {
4052
assertEquals("User/Mine@=", info.getUser());
4153
assertEquals("pw", info.getPassword());
4254
assertEquals("my.local.host/service", info.getConnect());
55+
assertFalse(info.isSysDba());
4356
}
4457
}

0 commit comments

Comments
 (0)