hiveserver2+kerberos+sentry多用户权限管理

1 kerberos配置

1.1 kerberos新建principal

在这里插入图片描述

1.2 导出对应的keytab文件

在这里插入图片描述

2 Sentry设置

2.1 用hiveserver2服务对应的tgt连接beeline

hiveserver2+kerberos+sentry多用户权限管理_第1张图片

2.2 创建role

在这里插入图片描述

2.3 授权role

在这里插入图片描述

2.4 把role赋给用户组

hiveserver2+kerberos+sentry多用户权限管理_第2张图片

3 连接

3.1 Beeline连接

3.1.1 初始化tgt

在这里插入图片描述

3.1.2 Beeline连接

在这里插入图片描述
这里的 principal 是固定不变的,其指的 hiveserver2 服务所对应的 principal ,而不是用户所对应的 principal ,用户对应的principal要初始化到kinit,通过tgt获取

3.1.3 查看权限

hiveserver2+kerberos+sentry多用户权限管理_第3张图片

3.2 Java程序连接

private static String url = "jdbc:hive2://172.16.2.10:10000/default;principal=hive/[email protected]";
//private static String url2 = "jdbc:hive2://node71.xdata:2181,node72.xdata:2181,node73.xdata:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2;principal=hive/[email protected]";
private static Connection conn = null;
private static PreparedStatement ps = null;
private static ResultSet rs = null;

/*
 * @description: 通过jdbc连接hive2
 */
@Test
@Before
public void getConnection() {
    Configuration conf = new Configuration();
    conf.set("hadoop.security.authentication", "Kerberos");
    System.setProperty("krb5_ini", System.getProperty("user.dir") + "\\krb5\\krb5.ini");
    System.setProperty("hive_keytab", System.getProperty("user.dir") + "\\krb5\\xin.keytab");
    System.setProperty("java.security.krb5.conf", System.getProperty("krb5_ini"));
    UserGroupInformation.setConfiguration(conf);
    try {
        UserGroupInformation.loginUserFromKeytab("[email protected]", System.getProperty("hive_keytab"));
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        // 使用hive用户登陆
        //conn = DriverManager.getConnection(url2);
		//使用自定义用户登陆
		conn = DriverManager.getConnection(url);
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

/**
 * @description: 进入数据库,展示所有表
 */
@Test
public void showTables() {
    try {
        // 进入default数据库
        ps = conn.prepareStatement("use default");
        ps.execute();
        // 展示所有表
        rs = ps.executeQuery("show tables");
        // 处理结果集
        while (rs.next()) {
            System.out.println(rs.getString(1));
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

/**
 * @description: 关闭连接
 */
@Test
@After
public void closeConnect() {
    if (rs != null) {
        try {
            rs.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    if (ps != null) {
        try {
            ps.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    if (conn != null) {
        try {
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

4 Yarn资源池

4.1 提前创建好root.users.xin对应的资源池。
4.2 或者在java程序中设置好指定到已有资源池的参数。

你可能感兴趣的:(kerberos)