Gephi 和 SQL 服务器的集成安全性
Gephi and integrated security with SQL Server
我在 Windows 上使用 gephi 0.9.2
。我可以通过 File - Import Database - Edge List
输入所有参数包括连接到我的 SQL 服务器 (2016)。 gui 中的用户名和密码(这意味着通过 SQL 服务器身份验证连接)。我想使用集成安全性 ("Windows authentication") 连接到数据库。我找不到输入连接字符串或以任何其他方式提供该信息的方法。
在 gephi 0.9.2 中有什么方法可以直接定义到 SQL 服务器的连接字符串?
这将完美地完成工作:
jdbc:sqlserver://server\instance;databaseName=DBName;integratedSecurity=true;
我只能在我的漫游配置文件中找到一个二进制文件 "EdgeListDatabase"。但是这个好像只能保存在gui中输入的数据。
以下是建立连接的方式(除了通过边缘列表之外别无他法):
gephi/io/importer/plugin/database/ImporterEdgeList.java
private void importData() throws Exception {
//Connect database
String url = SQLUtils.getUrl(database.getSQLDriver(), database.getHost(), database.getPort(), database.getDBName());
try {
report.log("Try to connect at " + url);
connection = database.getSQLDriver().getConnection(url, database.getUsername(), database.getPasswd());
report.log("Database connection established");
}
连接字符串是通过 getUrl 从您在边缘列表中传递的字段形成的:
gephi/io/database/drivers/SQLUtils.java
public static String getUrl(SQLDriver driver, String host, int port, String dbname) {
String res = "jdbc:";
res += driver != null ? driver.getPrefix() : "";
res += "://";
res += host != null ? host : "";
res += ":";
res += port != 0 ? port : "";
res += dbname != null ? "/" + dbname : "";
return res;
}
这就是在 SQLServerDriver 中建立最终连接的方式:
gephi/modules/DBDrivers/src/main/java/org/gephi/io/database/drivers/SQLServerDriver.java
public Connection getConnection(String connectionUrl, String username, String passwd) throws SQLException {
//Bug #745414
if (!connectionUrl.contains(";databaseName=")) {
String dbname = connectionUrl.substring(connectionUrl.lastIndexOf('/') + 1);
String url = connectionUrl.substring(0, connectionUrl.lastIndexOf('/'));
connectionUrl = url + ";databaseName=" + dbname;
}
return DriverManager.getConnection(connectionUrl, username, passwd);
}
public static Connection getConnection(String url, String user, String password)
如果您将主机设置为:您可能能够在主机字段上进行注入:
server\instance;integratedSecurity=true;authenticationScheme=javakerberos;password=
如果您将其用作 password=:,您将绕过插入的 res += ":";
的语法错误
照常设置 dbName,将端口留空并设置虚拟用户名和密码。
现在您必须希望驱动程序不会否决 windows 身份验证,因为您使用凭据调用了 getConnection。
如果这不起作用,您唯一的方法是更改 ImporterEdgeList.java plugin to call getConnection(String url) 的来源,如果冒号旁路不起作用,则根据 database.getHost() 手动伪造 url没用。
类似的东西:
private void importData() throws Exception {
//Connect database
String url = "jdbc:";
url += driver != null ? database.getSQLDriver().getPrefix() : "sqlserver";
url += "://";
url += database.getHost();
try {
report.log("Try to connect at " + url);
connection = database.getSQLDriver().getConnection(url);
report.log("Database connection established");
}
通过这个 hack,您可以在主机变量上指定其余的连接字符串
我在 Windows 上使用 gephi 0.9.2
。我可以通过 File - Import Database - Edge List
输入所有参数包括连接到我的 SQL 服务器 (2016)。 gui 中的用户名和密码(这意味着通过 SQL 服务器身份验证连接)。我想使用集成安全性 ("Windows authentication") 连接到数据库。我找不到输入连接字符串或以任何其他方式提供该信息的方法。
在 gephi 0.9.2 中有什么方法可以直接定义到 SQL 服务器的连接字符串?
这将完美地完成工作:
jdbc:sqlserver://server\instance;databaseName=DBName;integratedSecurity=true;
我只能在我的漫游配置文件中找到一个二进制文件 "EdgeListDatabase"。但是这个好像只能保存在gui中输入的数据。
以下是建立连接的方式(除了通过边缘列表之外别无他法):
gephi/io/importer/plugin/database/ImporterEdgeList.java
private void importData() throws Exception {
//Connect database
String url = SQLUtils.getUrl(database.getSQLDriver(), database.getHost(), database.getPort(), database.getDBName());
try {
report.log("Try to connect at " + url);
connection = database.getSQLDriver().getConnection(url, database.getUsername(), database.getPasswd());
report.log("Database connection established");
}
连接字符串是通过 getUrl 从您在边缘列表中传递的字段形成的: gephi/io/database/drivers/SQLUtils.java
public static String getUrl(SQLDriver driver, String host, int port, String dbname) {
String res = "jdbc:";
res += driver != null ? driver.getPrefix() : "";
res += "://";
res += host != null ? host : "";
res += ":";
res += port != 0 ? port : "";
res += dbname != null ? "/" + dbname : "";
return res;
}
这就是在 SQLServerDriver 中建立最终连接的方式: gephi/modules/DBDrivers/src/main/java/org/gephi/io/database/drivers/SQLServerDriver.java
public Connection getConnection(String connectionUrl, String username, String passwd) throws SQLException {
//Bug #745414
if (!connectionUrl.contains(";databaseName=")) {
String dbname = connectionUrl.substring(connectionUrl.lastIndexOf('/') + 1);
String url = connectionUrl.substring(0, connectionUrl.lastIndexOf('/'));
connectionUrl = url + ";databaseName=" + dbname;
}
return DriverManager.getConnection(connectionUrl, username, passwd);
}
public static Connection getConnection(String url, String user, String password)
如果您将主机设置为:您可能能够在主机字段上进行注入:
server\instance;integratedSecurity=true;authenticationScheme=javakerberos;password=
如果您将其用作 password=:,您将绕过插入的 res += ":";
的语法错误
照常设置 dbName,将端口留空并设置虚拟用户名和密码。
现在您必须希望驱动程序不会否决 windows 身份验证,因为您使用凭据调用了 getConnection。
如果这不起作用,您唯一的方法是更改 ImporterEdgeList.java plugin to call getConnection(String url) 的来源,如果冒号旁路不起作用,则根据 database.getHost() 手动伪造 url没用。
类似的东西:
private void importData() throws Exception {
//Connect database
String url = "jdbc:";
url += driver != null ? database.getSQLDriver().getPrefix() : "sqlserver";
url += "://";
url += database.getHost();
try {
report.log("Try to connect at " + url);
connection = database.getSQLDriver().getConnection(url);
report.log("Database connection established");
}
通过这个 hack,您可以在主机变量上指定其余的连接字符串