@@ -138,6 +138,9 @@ func (h *HiveService) databaseExists(dbType metastore.DBType, dbURL string) (boo
138138 if err != nil {
139139 return false , err
140140 }
141+ if ! dbIdentPattern .MatchString (dbName ) {
142+ return false , fmt .Errorf ("unsupported postgres database name %q" , dbName )
143+ }
141144 sql := fmt .Sprintf ("SELECT 1 FROM pg_database WHERE datname='%s';" , escapeSQLLiteral (dbName ))
142145 cmd := exec .Command ("psql" , adminURL , "-tAc" , sql )
143146 cmd .Env = h .env .Export ()
@@ -151,11 +154,14 @@ func (h *HiveService) databaseExists(dbType metastore.DBType, dbURL string) (boo
151154 if err != nil {
152155 return false , err
153156 }
157+ if ! dbIdentPattern .MatchString (info .dbName ) {
158+ return false , fmt .Errorf ("unsupported mysql database name %q" , info .dbName )
159+ }
154160 args := mysqlBaseArgs (info )
155161 query := fmt .Sprintf ("SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME='%s';" , escapeSQLLiteral (info .dbName ))
156162 args = append (args , "-e" , query )
157163 cmd := exec .Command ("mysql" , args ... )
158- cmd .Env = h .env .Export ()
164+ cmd .Env = mysqlCmdEnv ( h .env .Export (), info )
159165 out , err := cmd .CombinedOutput ()
160166 if err != nil {
161167 return false , fmt .Errorf ("mysql database existence check failed: %v\n Output: %s" , err , strings .TrimSpace (string (out )))
@@ -195,7 +201,7 @@ func (h *HiveService) createDatabase(dbType metastore.DBType, dbURL string) erro
195201 args := mysqlBaseArgs (info )
196202 args = append (args , "-e" , fmt .Sprintf ("CREATE DATABASE `%s`;" , info .dbName ))
197203 cmd := exec .Command ("mysql" , args ... )
198- cmd .Env = h .env .Export ()
204+ cmd .Env = mysqlCmdEnv ( h .env .Export (), info )
199205 out , err := cmd .CombinedOutput ()
200206 if err != nil {
201207 return fmt .Errorf ("failed to create mysql database %q: %v\n Output: %s" , info .dbName , err , strings .TrimSpace (string (out )))
@@ -261,10 +267,18 @@ func mysqlBaseArgs(info *mysqlConnInfo) []string {
261267 if info .user != "" {
262268 args = append (args , "--user" , info .user )
263269 }
270+ // Password is passed via MYSQL_PWD env var in mysqlCmdEnv() to avoid
271+ // exposing it in process listings (ps aux).
272+ return args
273+ }
274+
275+ // mysqlCmdEnv returns environment variables for MySQL commands,
276+ // including MYSQL_PWD if a password is set.
277+ func mysqlCmdEnv (baseEnv []string , info * mysqlConnInfo ) []string {
264278 if info .password != "" {
265- args = append (args , fmt . Sprintf ( "--password=%s" , info .password ) )
279+ return append (baseEnv , "MYSQL_PWD=" + info .password )
266280 }
267- return args
281+ return baseEnv
268282}
269283
270284func escapeSQLLiteral (s string ) string {
0 commit comments