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,您可以在主机变量上指定其余的连接字符串