温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

1.文档编写目的


CDH平台中的安全,认证(Kerberos/LDAP)是第一步,授权(Sentry)是第二步。如果要启用授权,必须先启用认证。但在CDH平台中给出了一种测试模式,即不启用认证而只启用Sentry授权。但强烈不建议在生产系统中这样使用,因为如果没有用户认证,授权没有任何意义形同虚设,用户可以随意使用任何超级用户登录HiveServer2或者Impala,并不会做密码校验。注:本文档仅适用于测试环境。

本文档主要描述如何在CDH未启用认证的情况下安装,配置及使用Sentry。

  • 内容概述

1.如何安装Sentry服务

2.Hive/Impala/Hue/HDFS服务如何与Sentry集成

3.Sentry测试

  • 测试环境

1.操作系统为CentOS6.5

2.CM和CDH版本为5.11.1

3.采用root用户操作

  • 前置条件

1.CDH集群运行正常

2.集群未启用认证服务(如Kerberos或LDAP)

2.Sentry安装


1.在MySQL中创建sentry数据库

建表语句:

create database sentry default character set utf8;

CREATE USER 'sentry'@'%' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON sentry. * TO 'sentry'@'%';

FLUSH PRIVILEGES;

命令行操作:

[root@ip-172-31-6-148 527-hive-HIVEMETASTORE]# mysql -uroot -p
Enter password:
...
mysql> create database sentry default character set utf8;
Query OK, 1 row affected (0.00 sec)
mysql> CREATE USER 'sentry'@'%' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON sentry.* TO 'sentry'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> 

2.进入Cloudera Manager控制台点击“添加服务”

3.进入服务添加界面

4.选择Sentry服务,点击“继续”

5.选择Sentry Server及Gateway的安装节点,点击“继续“,注意需提前在MySQL中建立好相关用户和数据库

6.输入Sentry服务的数据库信息,点击测试,测试通过,点击“继续”

7.等待服务安装成功,点击“继续”

8.点击“完成”,Sentry服务到此安装完成。

3.Sentry配置

3.1Hive配置


1.配置Hive使用Sentry服务

2.关闭Hive的用户模拟功能

3.集群未启用安全认证环境下,需要配置以下参数

<property><name>sentry.hive.testing.mode</name><value>true</value>
</property>

3.2Impala配置


配置Impala与Sentry集成

3.3Hue配置


配置Hue与Sentry集成

3.4HDFS配置


配置HDFS开启ACLs与Sentry权限同步

完成以上配置后,回到Cloudera Manager主页,部署客户端配置并重启相关服务。

4.Sentry测试

4.1创建hive超级用户


1.使用beeline连接HiveServer2,并登录hive用户

[root@ip-172-31-6-148 ~]# beeline
Beeline version 1.1.0-cdh5.12.0 by Apache Hive
beeline> !connect jdbc:hive2://localhost:10000
Enter username for jdbc:hive2://localhost:10000: hive
Enter password for jdbc:hive2://localhost:10000:
Connected to: Apache Hive (version 1.1.0-cdh5.12.0)
Driver: Hive JDBC (version 1.1.0-cdh5.12.0)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://localhost:10000> 

注意:标红部分为输入的hive用户,输入的hive用户并未真正的校验

2.创建一个admin角色

0: jdbc:hive2://localhost:10000> create role admin;
...
INFO  : OK
No rows affected (2.52 seconds)
0: jdbc:hive2://localhost:10000> 

3.为admin角色赋予超级权限

0: jdbc:hive2://localhost:10000> grant all on server server1 to role admin;

...

INFO : OK

No rows affected (0.221 seconds)

0: jdbc:hive2://localhost:10000>

4.将admin角色授权给hive用户组

0: jdbc:hive2://localhost:10000> grant role admin to group hive;

...

INFO : OK

No rows affected (0.162 seconds)

0: jdbc:hive2://localhost:10000>

4.2创建test表


使用beeline登录hive用户,创建一个test表,并插入测试数据

0: jdbc:hive2://localhost:10000> create table test (s1 string, s2 string) row format delimitedfields terminated by ',';

...

INFO : OK

No rows affected (0.592 seconds)

0: jdbc:hive2://localhost:10000> insert into test values('a','b'),('1','2');

...

INFO : OK

No rows affected (20.123 seconds)

0: jdbc:hive2://localhost:10000>

4.3创建测试角色并授权给用户组


创建两个角色:

read:只能读default库test表,并授权给fayson用户组

write:只能写default库test表,并授权给user_w用户组

注意:集群所有节点必须存在fayson和user_w用户,用户默认用户组与用户名一致,赋权是针对用户组而不是针对用户。

[root@ip-172-31-6-148 cdh-shell-master]# id fayson
uid=501(fayson) gid=501(fayson) groups=501(fayson)
[root@ip-172-31-6-148 cdh-shell-master]# useradd user_w
[root@ip-172-31-6-148 cdh-shell-master]# id user_w
uid=502(user_w) gid=502(user_w) groups=502(user_w)
[root@ip-172-31-6-148 cdh-shell-master]# 

1.使用hive用户创建创建read和write角色,并授权read角色对test表select权限,write角色对test表insert权限

0: jdbc:hive2://localhost:10000> create role read;

...

INFO : OK

No rows affected (0.094 seconds)

0: jdbc:hive2://localhost:10000> grant select on table test to role read;

...

INFO : OK

No rows affected (0.1 seconds)

0: jdbc:hive2://localhost:10000> create role write;

...

INFO : OK

No rows affected (0.105 seconds)

0: jdbc:hive2://localhost:10000> grant insert on table test to role write;

...

INFO : OK

No rows affected (0.112 seconds)

0: jdbc:hive2://localhost:10000>

2.为fayson用户组授权read角色,为user_w用户组授权write角色

0: jdbc:hive2://localhost:10000> grant role read to group fayson;
...
INFO  : OK
No rows affected (0.187 seconds)
0: jdbc:hive2://localhost:10000> grant role write to group user_w;
...
INFO  : OK
No rows affected (0.101 seconds)
0: jdbc:hive2://localhost:10000> 

4.4beeline验证


1.使用fayson用户登录beeline进行验证

[root@ip-172-31-6-148 ~]# beeline
Beeline version 1.1.0-cdh5.12.0 by Apache Hive
beeline> !connect jdbc:hive2://localhost:10000
scan complete in 2ms
Connecting to jdbc:hive2://localhost:10000
Enter username for jdbc:hive2://localhost:10000: fayson
Enter password for jdbc:hive2://localhost:10000:
Connected to: Apache Hive (version 1.1.0-cdh5.12.0)
Driver: Hive JDBC (version 1.1.0-cdh5.12.0)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://localhost:10000> show tables;
...
INFO  : OK
+-----------+--+
| tab_name  |
+-----------+--+
| test      |
+-----------+--+
1 row selected (0.351 seconds)
0: jdbc:hive2://localhost:10000> select * from test;
...
INFO  : OK
+----------+----------+--+
| test.s1  | test.s2  |
+----------+----------+--+
| a        | b        |
| 1        | 2        |
+----------+----------+--+
2 rows selected (0.24 seconds)
0: jdbc:hive2://localhost:10000>
0: jdbc:hive2://localhost:10000> insert into test values("2", "222");
Error: Error while compiling statement: FAILED: SemanticException No valid privilegesUser fayson does not have privileges for QUERYThe required privileges: Server=server1->Db=default->Table=test->action=insert; (state=42000,code=40000)
0: jdbc:hive2://localhost:10000> 

2.使用user_w用户登录beeline验证

[root@ip-172-31-6-148 ~]# beeline
Beeline version 1.1.0-cdh5.12.0 by Apache Hive
beeline> !connect jdbc:hive2://localhost:10000
scan complete in 2ms
Connecting to jdbc:hive2://localhost:10000
Enter username for jdbc:hive2://localhost:10000: user_w
Enter password for jdbc:hive2://localhost:10000:
Connected to: Apache Hive (version 1.1.0-cdh5.12.0)
Driver: Hive JDBC (version 1.1.0-cdh5.12.0)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://localhost:10000> show tables;
INFO  : OK
+-----------+--+
| tab_name  |
+-----------+--+
| test      |
+-----------+--+
1 row selected (0.365 seconds)
0: jdbc:hive2://localhost:10000> select  * from test;
Error: Error while compiling statement: FAILED: SemanticException No valid privilegesUser user_w does not have privileges for QUERYThe required privileges: Server=server1->Db=default->Table=test->Column=s1->action=select; (state=42000,code=40000)
0: jdbc:hive2://localhost:10000> insert into test values("2", "333");
...
INFO  : Completed executing command(queryId=hive_20170902183535_56bcd189-544a-453f-9752-e40a9fed60c5); Time taken: 17.762 seconds
INFO  : OK
No rows affected (18.035 seconds)
0: jdbc:hive2://localhost:10000> 

验证总结:

fayson用户所属组为fayson拥有test表读权限,所以只能对test表进行selecth和count操作不能进行insert操作;

user_w用户所属组为user_w拥有test表写权限,所以只能对test表进行insert操作不能进行select和count操作;

4.5HDFS验证


1.切换至fayson用户下,浏览和查看/user/hive/warehouse/test数据目录及文件

[root@ip-172-31-6-148 ~]# su fayson
[fayson@ip-172-31-6-148 root]$ cd /home/fayson/
[fayson@ip-172-31-6-148 ~]$ ll
total 4
-rw-rw-r-- 1 fayson fayson 19 Sep  5 12:55 test.txt
[fayson@ip-172-31-6-148 ~]$ hadoop fs -ls /user/hive/warehouse
ls: Permission denied: user=fayson, access=READ_EXECUTE, inode="/user/hive/warehouse":hive:hive:drwxrwx--x
[fayson@ip-172-31-6-148 ~]$ hadoop fs -ls /user/hive/warehouse/test
Found 1 items
-rwxrwx--x+  3 hive hive          8 2017-09-05 12:52 /user/hive/warehouse/test/000000_0
[fayson@ip-172-31-6-148 ~]$ hadoop fs -cat /user/hive/warehouse/test/000000_0
a,b
1,2
[fayson@ip-172-31-6-148 ~]$ hadoop fs -put test.txt /user/hive/warehouse/test
put: Permission denied: user=fayson, access=WRITE, inode="/user/hive/warehouse/test":hive:hive:drwxrwx--x
[fayson@ip-172-31-6-148 ~]$ 

2.切换user_w用户下,浏览和查看/user/hive/warehouse/test数据目录及文件

[root@ip-172-31-6-148 ~]# su user_w
[user_w@ip-172-31-6-148 root]$ cd /home/user_w/
[user_w@ip-172-31-6-148 ~]$ cat test.txt
333,5555
eeee,dddd
[user_w@ip-172-31-6-148 ~]$ hadoop fs -ls /user/hive/warehouse
ls: Permission denied: user=user_w, access=READ_EXECUTE, inode="/user/hive/warehouse":hive:hive:drwxrwx--x
[user_w@ip-172-31-6-148 ~]$ hadoop fs -ls /user/hive/warehouse/test
ls: Permission denied: user=user_w, access=READ_EXECUTE, inode="/user/hive/warehouse/test":hive:hive:drwxrwx--x
[user_w@ip-172-31-6-148 ~]$ hadoop fs -put test.txt /user/hive/warehouse/test
[user_w@ip-172-31-6-148 ~]$ 

测试总结:

fayson用户所属用户组为fayson,该组只拥有对test表的读权限,因此fayson用户不能对/user/hive/warehouse目录下除test以外的其它目录进行查看(包含父目录),并且不能向test目录put文件,只能浏览和查看test目录下的文件。

user_w用户所属用户组为user_w,该组只拥有对test表的写权限,因此user_w用户不能对/user/hive/warehouse目录下的任何目录进行查看(包含父目录),并且只拥有向test目录put文件的权限。说明Sentry实现了HDFS的ACL同步。

4.6Hue验证


1.使用admin用户登录Hue,分别创建fayson和user_w用户

2.使用fayson用户登录Hue

可以查看test表

可以对test表进行count操作

只有SELECT权限不能向test表插入数据

FileBrower验证

不可以浏览/user/hive/warehouse目录

可以浏览有SELECT权限的/user/hive/warehouse/test数据目录

可以查看/user/hive/warehouse/test目录下的所有数据文件,但不能修改

3.使用user_w用户登录Hue

因为无SELECT权限,所以不能查询表信息

不能对test表进行count操作

可以向test表中插入数据

FileBrowser

不可以浏览test表数据目录的父目录/user/hive/warehouse

无SELECT权限也不能浏test表的数据目录/user/hive/warehouse/test

测试总结:

fayson和user_w用户均能通过hue界面看到test表,拥有read角色的fayson用户组能对test表进行select和count操作,并且能通过File Browser浏览和查看test表的数据目录/user/hive/warehouse/test。拥有write角色的user_w用户组只能对test表进行insert操作,但不能通过File Browser浏览和查看test表的数据目录/user/hive/warehouse/test。说明Sentry在命令行的操作和授权在Hue中依旧有效。

4.7Impala验证


1.使用fayson用户测试

登录集群任意节点命令行下切换到fayson用户下

[root@ip-172-31-6-148 ~]# su fayson
[fayson@ip-172-31-6-148 root]$ 

在命令行执行impala-shell命令

[Not connected] > connect ip-172-31-10-118.fayson.com:21000;
...
[ip-172-31-10-118.fayson.com:21000] > show tables;
Query: show tables
+------+
| name |
+------+
| test |
+------+
Fetched 1 row(s) in 0.05s
[ip-172-31-10-118.fayson.com:21000] > select * from test;
...
+----+----------+
| s1 | s2       |
+----+----------+
| 1  | tttttttt |
+----+----------+
Fetched 1 row(s) in 5.32s
[ip-172-31-10-118.fayson.com:21000] > select count(*) from test;
...
+----------+
| count(*) |
+----------+
| 1        |
+----------+
Fetched 1 row(s) in 0.14s
[ip-172-31-10-118.fayson.com:21000] > insert into test values('2', 'test2');
Query: insert into test values('2', 'test2')
Query submitted at: 2017-09-11 01:37:56 (Coordinator: http://ip-172-31-10-118.fayson.com:25000)
ERROR: AuthorizationException: User 'fayson' does not have privileges to execute 'INSERT' on: default.test
[ip-172-31-10-118.fayson.com:21000] >

2.使用user_w用户测试

登录集群任意节点命令行下切换到user_w用户下

[root@ip-172-31-6-148 ~]# su user_w
[user_w@ip-172-31-6-148 root]$ impala-shell

在命令行执行命令impala-shell,进行如下操作

[user_w@ip-172-31-6-148 root]$ impala-shell
...
[Not connected] > connect ip-172-31-10-118.fayson.com:21000;
...
Query: show tables
+------+
| name |
+------+
| test |
+------+
Fetched 1 row(s) in 0.06s
[ip-172-31-10-118.fayson.com:21000] > select * from test;
Query: select * from test
Query submitted at: 2017-09-11 01:41:17 (Coordinator: http://ip-172-31-10-118.fayson.com:25000)
ERROR: AuthorizationException: User 'user_w' does not have privileges to execute 'SELECT' on: default.test[ip-172-31-10-118.fayson.com:21000] > select count(*) from test;
Query: select count(*) from test
Query submitted at: 2017-09-11 01:41:23 (Coordinator: http://ip-172-31-10-118.fayson.com:25000)
ERROR: AuthorizationException: User 'user_w' does not have privileges to execute 'SELECT' on: default.test[ip-172-31-10-118.fayson.com:21000] > insert into test values('2', 'impala insert');
Query: insert into test values('2', 'impala insert')
Query submitted at: 2017-09-11 01:41:48 (Coordinator: http://ip-172-31-10-118.fayson.com:25000)
Query progress can be monitored at: http://ip-172-31-10-118.fayson.com:25000/query_plan?query_id=bd4a433465037682:77a7c3c400000000
Modified 1 row(s) in 0.71s
[ip-172-31-10-118.fayson.com:21000] >

验证总结:

Impala与Sentry集成后可以使用Sentry来进行权限管理,拥有read角色的fayson用户组只能对test表进行select和count操作不能插入数据,拥有write角色的user_w

用户组只能对test表插入数据不能进行select和count操作。说明Sentry实现了Hive权限与Impala的同步。

5.Sentry列权限管理验证


1.在集群所有节点新增fayson_r用户

[root@ip-172-31-6-148 cdh-shell-bak]# useradd fayson_r
[root@ip-172-31-6-148 cdh-shell-bak]# id fayson_r
uid=504(fayson_r) gid=504(fayson_r) groups=504(fayson_r)
[root@ip-172-31-6-148 cdh-shell-bak]# 

2.使用beeline登录hive用户

使用hive用户创建columnread角色,并为角色授权test表s1列的读权限,将columnread角色授权给fayson_r用户组。

[root@ip-172-31-6-148 cdh-shell-bak]# beeline
Beeline version 1.1.0-cdh5.12.1 by Apache Hive
beeline> !connect jdbc:hive2://localhost:10000
Enter username for jdbc:hive2://localhost:10000: hive
Enter password for jdbc:hive2://localhost:10000:
Connected to: Apache Hive (version 1.1.0-cdh5.12.1)
Driver: Hive JDBC (version 1.1.0-cdh5.12.1)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://localhost:10000> create role columnread;
...
INFO  : OK
No rows affected (0.225 seconds)
0: jdbc:hive2://localhost:10000> grant select(s1) on table test to role columnread;
...
INFO  : OK
No rows affected (0.095 seconds)
0: jdbc:hive2://localhost:10000> grant role columnread to group fayson_r;
...
INFO  : OK
No rows affected (0.091 seconds)
0: jdbc:hive2://localhost:10000> 

3.使用beeline登录fayson_r用户测试

[root@ip-172-31-6-148 cdh-shell-bak]# beeline
Beeline version 1.1.0-cdh5.12.1 by Apache Hive
beeline> !connect jdbc:hive2://localhost:10000
scan complete in 2ms
Connecting to jdbc:hive2://localhost:10000
Enter username for jdbc:hive2://localhost:10000: fayson_r
Enter password for jdbc:hive2://localhost:10000:
Connected to: Apache Hive (version 1.1.0-cdh5.12.1)
Driver: Hive JDBC (version 1.1.0-cdh5.12.1)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://localhost:10000> show tables;
...
INFO  : OK
+-----------+--+
| tab_name  |
+-----------+--+
| test      |
+-----------+--+
1 row selected (0.304 seconds)
0: jdbc:hive2://localhost:10000> select * from test;
Error: Error while compiling statement: FAILED: SemanticException No valid privilegesUser fayson_r does not have privileges for QUERYThe required privileges: Server=server1->Db=default->Table=test->Column=s2->action=select; (state=42000,code=40000)
0: jdbc:hive2://localhost:10000> select s1 from test;
...
INFO  : OK
+-------+--+
|  s1   |
+-------+--+
| a     |
| 1     |
| 111   |
| 333   |
| eeee  |
+-------+--+
5 rows selected (0.197 seconds)
0: jdbc:hive2://localhost:10000> select s2 from test;
Error: Error while compiling statement: FAILED: SemanticException No valid privilegesUser fayson_r does not have privileges for QUERYThe required privileges: Server=server1->Db=default->Table=test->Column=s2->action=select; (state=42000,code=40000)
0: jdbc:hive2://localhost:10000> select count(*) from test;
Error: Error while compiling statement: FAILED: SemanticException No valid privilegesUser fayson_r does not have privileges for QUERYThe required privileges: Server=server1->Db=default->Table=test->action=select; (state=42000,code=40000)
0: jdbc:hive2://localhost:10000> select count(s1) from test;
...
INFO  : OK
+------+--+
| _c0  |
+------+--+
| 5    |
+------+--+
1 row selected (23.855 seconds)
0: jdbc:hive2://localhost:10000>

4.浏览HDFS目录

[fayson_r@ip-172-31-6-148 ~]$ hadoop fs -ls /user/hive/warehouse
ls: Permission denied: user=fayson_r, access=READ_EXECUTE, inode="/user/hive/warehouse":hive:hive:drwxrwx--x
[fayson_r@ip-172-31-6-148 ~]$ hadoop fs -ls /user/hive/warehouse/test
ls: Permission denied: user=fayson_r, access=READ_EXECUTE, inode="/user/hive/warehouse/test":hive:hive:drwxrwx--x
[fayson_r@ip-172-31-6-148 ~]$ 

5.使用admin用户登录Hue,创建fayson_r用户,然后使用fayson_r用户登录

测试总结:

fayson_r用户所属用户组为fayson_r,该组只拥有对test表s1列的读权限,因此在select和count的时候只能对s1列进行select和count,fayson_r用户无权限浏览/user/hive/warehouse下的所有目录;使用hue只能对test表s1列进行select和count操作,无权限浏览/user/hive/warehouse目录及目录下所有子目录。

注意:Sentry只支持SELECT的列授权,不能用于INSERT和ALL的列授权。

6.备注

在使用beeline进行授权验证时,只是输入了username未做用户信息校验。在未启用认证服务的集群下,该文档的Sentry配置方式只适用于测试环境,不能用于生产环境。

在集群启用Sentry服务后,由于Sentry不支持Hive CLI权限管理,所以建议禁用Hive CLI。但在非安全环境下,不能通过hadoop.proxyuser.hive.groups来限制访问用户组。

7.Hive授权参考


  1. 角色创建和删除
create role test;
drop role test;
  1. 角色授权和取消授权

表授权给角色

grant select on table test_table to role role_name;
revoke select on table test_table to role role_name;

列授权给角色

grant select(column1,column2) on table test_table to role role_name;
revoke select(column1,column2) on table test_table to role role_name;
  1. 组授权和取消授权
grant role role_name to group user_group;
revoke role role_name to group user_group;

注意:Sentry适用于用户组授权,不适用与用户授权;

8.常见问题


  1. 不能创建角色,异常如下

0: jdbc:hive2://localhost:10000> create role admin;

Error: Error whilecompiling statement: FAILED:InvalidConfigurationException hive.server2.authentication can't be none innon-testing mode (state=42000,code=40000)

0: jdbc:hive2://localhost:10000>

原因:由于集群未启用Kerberos,需要配置sentry.hive.testing.mode为true

解决方法:参考3.1的第3步配置。

醉酒鞭名马,少年多浮夸! 岭南浣溪沙,呕吐酒肆下!挚友不肯放,数据玩的花!
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。


原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操

转载于:https://blog.51cto.com/14049791/2319266

0028-如何在CDH未启用认证的情况下安装及使用Sentry相关推荐

  1. 及其他公共信息网络的计算机上存储,不得在未采取防护措施的情况下将互联网及其他公共信息网络上的数据复制到涉密计算机及网络,确...

    相关题目与解析 不得在未采取防护措施的情况下将互联网及其他公共信息网络上的数据复制到涉密计算机及网络,确 下列哪些操作行为属违规行为(). 将涉密计算机.涉密存储设备接入互联网及其他公共信息网络的,是 ...

  2. 未制卡的情况下,申请社会保障卡的步骤。

    1. 先去网站 西安市人社局网上办事大厅 ,选择个人用户, 登录之后,选择 社保卡办理进度查询. 2. 填写完个人信息之后,点击查询,已经制卡了的,就可以直接预约领卡日期(给5天后预约),没有制卡的, ...

  3. 有登陆认证的情况下如何使用Wisdom RESTClient?

    访问REST API时,很多系统需要登陆认证,登陆成功以后才允许访问API.下面介绍一下有登陆认证情况下如何使用 Wisdom RESTClient 测试API的方法. 方法很简单即在浏览器上成功登录 ...

  4. php二叉树广度插入数据,php-如何在不使用广度优先遍历的情况下找到二叉树级别k的节点数?...

    给定这个二叉树(实际上,二叉树可以是随机的和动态的,这只是一个示例-): 这是给定的事实: >所有节点都连接到其父节点,以便我们可以从下到上(当然也从上到下)遍历. >所有节点都包含有关其 ...

  5. java怎么复制别人的数据库_java-如何在不使用Apache DDLUtils的情况下使用JDBC将模式从一个数据库复制到另一个数据库?...

    我在MySQL中有一个数据库,我想以编程方式在FileMaker Pro中创建所有相同的表和字段.我可以使用JDBC自己完成此操作,但我希望已经有了可以执行此操作的库. 我研究了来自Apache的DD ...

  6. 如何在win7(xp)home version下安装 rose 32 bit

    [0]README 0.1) 以下部分内容转自 http://blog.csdn.net/encienqi/article/details/5578725 [1] 干货开始 如果是家庭版(win7 o ...

  7. JAVA实现在面板中添加图表_java-如何在不制作新图表的情况下将jzy3d图表添加到JFrame?...

    以下代码用于在JFrame中制作jzy3d图表: public class SurfaceViewerFrame extends IconFrame { public SurfaceViewerFra ...

  8. android imageview 锯齿,android – 如何在启用消除锯齿的情况下旋转drawable

    如果您知道Drawable是BitmapDrawable,则可以在位图的Paint中使用消除锯齿来执行以下操作: /** * Not as full featured as ImageView.onD ...

  9. 启用tls的情况下openvpn配置文件合并到ovpn文件

    将对应文件内容复制到 ovpn 文件中的对应位置,如下: <ca> </ca> <cert> </cert> <key> </key& ...

  10. 如何在Win10(包括2004版本)下安装64位CATIA

    Win10下无法安装64位CATIA,早就像一个魔咒一样,一直在江湖上传说.究其原因,是因为SSQ的破解软件,无法在Win10(2004版本)之后弹出UI界面,导致安装者束手无策,无法破解.就像这个帖 ...

最新文章

  1. 初识Lucene.net
  2. re 模块 分组特别说明
  3. 2018蓝桥杯省赛---java---B---8(日志统计)
  4. jitpack让使用第三方依赖库更简单
  5. 马斯克提出以430亿收购推特 推特考虑用毒丸来阻止其增持股份
  6. java orientation_Java WritableCellFormat.setOrientation方法代码示例
  7. 服务器 python cant open file_QQ炫舞转服系统-QQ炫舞官方网站-腾讯游戏
  8. 模拟城市5一直显示服务器中断,EA关闭《模拟城市5》非关键功能缓解服务器问题...
  9. 32位/64位CPU的32位/64位指的是什么?
  10. 微信连wifi 电脑怎么连接到服务器,微信连wifi怎么用 微信连Wi-Fi开通使用教程-电脑教程...
  11. kali钓鱼(超详细)
  12. 在钉钉如何愉快地给老师点很多赞
  13. 区块链的未来:“2020年起3-5年:国内区块链大规模商业应用将全面落地开花”
  14. 4510. 寻宝!大冒险!
  15. Netty的深入浅出--79.Netty官方Reference Counted Objects文档说明
  16. [存储-测试工具]vdbench文件测试随机IO混合读写配置模板
  17. 程序员每天会阅读哪些技术网站来提升自己?
  18. 机器学习中的隐马尔科夫模型(HMM)详解
  19. c语言教学知识,C语言的编程教程_入门教学知识
  20. 2014年的奋斗目标

热门文章

  1. Insurance 项目——Mybetis-generator生成
  2. 创建maven web项目无法创建sec目录
  3. memcache 客户端性能对比试验
  4. 机器学习基础:核密度估计(Machine Learning Fundamentals: Kernel Density Estimation)
  5. DDMF PluginDoctor Mac - 插件分析器音频质量测试
  6. Recordia for Mac - 音频无损录制工具「M1兼容」
  7. 介绍下BFC,IFC,GFC和FFC
  8. 刚刚接触视频剪辑,怎么快速剪视频?
  9. linux目录结构和份文件系统
  10. spring boot2.0.4集成druid,用jmeter并发测试工具调用接口,druid查看监控的结果