This is an automated email from the ASF dual-hosted git repository.

qiaojialin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new e690c1b  [IOTDB-575] JMX authenticate configuration (#979)
e690c1b is described below

commit e690c1b0215c5d91ad692a3fe835196f4bba3619
Author: Zesong Sun <[email protected]>
AuthorDate: Tue Apr 7 21:31:04 2020 +0800

    [IOTDB-575] JMX authenticate configuration (#979)
    
    * JMX user and password
    * Set -Dcom.sun.management.jmxremote.authenticate=true
---
 docs/UserGuide/6-System Tools/3-JMX Tool.md        | 22 ++++++++++++++++++
 docs/zh/UserGuide/6-System Tools/3-JMX Tool.md     | 22 ++++++++++++++++++
 .../resources/conf/iotdb-engine.properties         | 10 +++++++++
 server/src/assembly/resources/conf/iotdb-env.bat   |  4 ++--
 server/src/assembly/resources/conf/iotdb-env.sh    |  4 ++--
 .../java/org/apache/iotdb/db/conf/IoTDBConfig.java | 26 ++++++++++++++++++++++
 .../org/apache/iotdb/db/conf/IoTDBConstant.java    |  1 +
 .../org/apache/iotdb/db/conf/IoTDBDescriptor.java  |  4 ++++
 .../org/apache/iotdb/db/service/JMXService.java    |  7 ++++++
 9 files changed, 96 insertions(+), 4 deletions(-)

diff --git a/docs/UserGuide/6-System Tools/3-JMX Tool.md 
b/docs/UserGuide/6-System Tools/3-JMX Tool.md
index 3827622..9bc1d1f 100644
--- a/docs/UserGuide/6-System Tools/3-JMX Tool.md       
+++ b/docs/UserGuide/6-System Tools/3-JMX Tool.md       
@@ -23,6 +23,28 @@
 
 Java VisualVM is a tool that provides a visual interface for viewing detailed 
information about Java applications while they are running on a Java Virtual 
Machine (JVM), and for troubleshooting and profiling these applications. 
 
+## Config
+
+JMX authenticate configuration is `true` by default, so you need to edit JMX 
user name and password in `iotdb-engine.properties`. Related configurations are:
+
+* jmx\_user
+
+|Name| jmx\_user |
+|:---:|:---|
+|Description| User name of JMX |
+|Type| String |
+|Default| admin |
+|Effective|After restart system|
+
+* jmx\_password
+
+|Name| jmx\_password |
+|:---:|:---|
+|Description| User password of JMX |
+|Type| String |
+|Default| password |
+|Effective|After restart system|
+
 ## Usage
 
 Step1: Start sever.
diff --git a/docs/zh/UserGuide/6-System Tools/3-JMX Tool.md 
b/docs/zh/UserGuide/6-System Tools/3-JMX Tool.md
index 4e50ab8..30ad328 100644
--- a/docs/zh/UserGuide/6-System Tools/3-JMX Tool.md    
+++ b/docs/zh/UserGuide/6-System Tools/3-JMX Tool.md    
@@ -23,6 +23,28 @@
 
 Java VisualVM提供了一个可视化的界面,用于查看Java应用程序在Java虚拟机(JVM)上运行的详细信息,并对这些应用程序进行故障排除和分析。
 
+## 配置
+
+JMX 访问权限认证设置默认打开,因此你需要编辑`iotdb-engine.properties`中的 JMX 用户名和密码。相关配置项包括:
+
+* jmx\_user
+
+|名字| jmx\_user |
+|:---:|:---|
+|描述| JMX配置中的用户名 |
+|类型| String |
+|默认值| admin |
+|改后生效方式|重启服务器生效|
+
+* jmx\_password
+
+|名字| jmx\_password |
+|:---:|:---|
+|描述| JMX配置中的密码 |
+|类型| String |
+|默认值| password |
+|改后生效方式|重启服务器生效|
+
 ## 使用
 
 第一步:启动IoTDB server。
diff --git a/server/src/assembly/resources/conf/iotdb-engine.properties 
b/server/src/assembly/resources/conf/iotdb-engine.properties
index 35b7ef3..39ac594 100644
--- a/server/src/assembly/resources/conf/iotdb-engine.properties
+++ b/server/src/assembly/resources/conf/iotdb-engine.properties
@@ -40,6 +40,16 @@ rpc_thrift_compression_enable=false
 rpc_max_concurrent_client_num=65535
 
 ####################
+### JMX Configuration
+####################
+
+# If system property com.sun.management.jmxremote.authenticate is true, user 
name should be set to environment
+jmx_user=admin
+
+# If system property com.sun.management.jmxremote.authenticate is true, 
password should be set to environment
+jmx_password=password
+
+####################
 ### Dynamic Parameter Adapter Configuration
 ####################
 
diff --git a/server/src/assembly/resources/conf/iotdb-env.bat 
b/server/src/assembly/resources/conf/iotdb-env.bat
index 007ea8c..dea41bb 100644
--- a/server/src/assembly/resources/conf/iotdb-env.bat
+++ b/server/src/assembly/resources/conf/iotdb-env.bat
@@ -22,9 +22,9 @@ set LOCAL_JMX=no
 set JMX_PORT=31999
 
 if "%LOCAL_JMX%" == "yes" (
-               set IOTDB_JMX_OPTS="-Diotdb.jmx.local.port=%JMX_PORT%" 
"-Dcom.sun.management.jmxremote.authenticate=false" 
"-Dcom.sun.management.jmxremote.ssl=false"
+               set IOTDB_JMX_OPTS="-Diotdb.jmx.local.port=%JMX_PORT%" 
"-Dcom.sun.management.jmxremote.authenticate=true" 
"-Dcom.sun.management.jmxremote.ssl=false"
        ) else (
-               set IOTDB_JMX_OPTS="-Dcom.sun.management.jmxremote" 
"-Dcom.sun.management.jmxremote.authenticate=false"  
"-Dcom.sun.management.jmxremote.ssl=false" 
"-Dcom.sun.management.jmxremote.port=%JMX_PORT%"
+               set IOTDB_JMX_OPTS="-Dcom.sun.management.jmxremote" 
"-Dcom.sun.management.jmxremote.authenticate=true"  
"-Dcom.sun.management.jmxremote.ssl=false" 
"-Dcom.sun.management.jmxremote.port=%JMX_PORT%"
        )
 
 IF ["%IOTDB_HEAP_OPTS%"] EQU [""] (
diff --git a/server/src/assembly/resources/conf/iotdb-env.sh 
b/server/src/assembly/resources/conf/iotdb-env.sh
index 583e93b..6132542 100755
--- a/server/src/assembly/resources/conf/iotdb-env.sh
+++ b/server/src/assembly/resources/conf/iotdb-env.sh
@@ -170,9 +170,9 @@ JMX_PORT="31999"
 
 if [ "JMX_LOCAL" = "yes" ]; then
        IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -Diotdb.jmx.local.port=$JMX_PORT"
-       IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false"
+       IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS 
-Dcom.sun.management.jmxremote.authenticate=true 
-Dcom.sun.management.jmxremote.ssl=false"
 else
-       IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.authenticate=false  
-Dcom.sun.management.jmxremote.ssl=false"
+       IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS -Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.authenticate=true  
-Dcom.sun.management.jmxremote.ssl=false"
        IOTDB_JMX_OPTS="$IOTDB_JMX_OPTS 
-Dcom.sun.management.jmxremote.port=$JMX_PORT "
 fi
 
diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java 
b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
index 1b38462..c0ce887 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
@@ -68,6 +68,16 @@ public class IoTDBConfig {
   private int rpcMaxConcurrentClientNum = 65535;
 
   /**
+   * JMX user name
+   */
+  private String jmxUser = "admin";
+
+  /**
+   * JMX user password
+   */
+  private String jmxPassword = "password";
+
+  /**
    * Memory allocated for the read process
    */
   private long allocateMemoryForWrite = Runtime.getRuntime().maxMemory() * 6 / 
10;
@@ -633,6 +643,22 @@ public class IoTDBConfig {
     this.enableMetricService = enableMetricService;
   }
 
+  public String getJmxUser() {
+    return jmxUser;
+  }
+
+  public void setJmxUser(String jmxUser) {
+    this.jmxUser = jmxUser;
+  }
+
+  public String getJmxPassword() {
+    return jmxPassword;
+  }
+
+  public void setJmxPassword(String jmxPassword) {
+    this.jmxPassword = jmxPassword;
+  }
+
   void setDataDirs(String[] dataDirs) {
     this.dataDirs = dataDirs;
   }
diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConstant.java 
b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConstant.java
index 18b74a3..c52692f 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConstant.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConstant.java
@@ -33,6 +33,7 @@ public class IoTDBConstant {
   public static final String SERVER_RMI_ID = "java.rmi.server.randomIDs";
   public static final String RMI_SERVER_HOST_NAME = "java.rmi.server.hostname";
   public static final String JMX_REMOTE_RMI_PORT = 
"com.sun.management.jmxremote.rmi.port";
+  public static final String JMX_REMOTE_AUTHENTICATE = 
"com.sun.management.jmxremote.authenticate";
   public static final String IOTDB_PACKAGE = "org.apache.iotdb.service";
   public static final String JMX_TYPE = "type";
 
diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java 
b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
index ad7a2ed..d046e11 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
@@ -134,6 +134,10 @@ public class IoTDBDescriptor {
       conf.setRpcPort(Integer.parseInt(properties.getProperty("rpc_port",
           Integer.toString(conf.getRpcPort()))));
 
+      conf.setJmxUser(properties.getProperty("jmx_user", conf.getJmxUser()));
+
+      conf.setJmxPassword(properties.getProperty("jmx_password", 
conf.getJmxPassword()));
+
       conf.setTimestampPrecision(properties.getProperty("timestamp_precision",
           conf.getTimestampPrecision()));
 
diff --git a/server/src/main/java/org/apache/iotdb/db/service/JMXService.java 
b/server/src/main/java/org/apache/iotdb/db/service/JMXService.java
index b12aceb..99a7ee6 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/JMXService.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/JMXService.java
@@ -30,10 +30,13 @@ import javax.management.MBeanServer;
 import javax.management.MalformedObjectNameException;
 import javax.management.NotCompliantMBeanException;
 import javax.management.ObjectName;
+import javax.management.remote.JMXConnector;
 import javax.management.remote.JMXConnectorServer;
 import javax.management.remote.JMXConnectorServerFactory;
 import javax.management.remote.JMXServiceURL;
+import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBConstant;
+import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.exception.StartupException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -86,6 +89,10 @@ public class JMXService implements IService {
 
   private JMXConnectorServer createJMXServer(boolean local) throws IOException 
{
     Map<String, Object> env = new HashMap<>();
+    if 
(Boolean.getBoolean(System.getProperty(IoTDBConstant.JMX_REMOTE_AUTHENTICATE))) 
{
+      IoTDBConfig config = IoTDBDescriptor.getInstance().getConfig();
+      env.put(JMXConnector.CREDENTIALS, new String[]{config.getJmxUser(), 
config.getJmxPassword()});
+    }
 
     InetAddress serverAddress;
     if (local) {

Reply via email to