2

ソフトウェア用の Windows インストーラーを作成しました。これは、MS SQL 2008 サーバーと組み合わせて、すべての Windows バージョンで正常に動作します。ただし、MS SQL 2012 の導入により、Windows インストーラーが使用しているアカウント (SYSTEM_LOCAL) はデフォルトで「sysadmin」権限が取り消されたため、インストーラーから SQL スクリプトを直接実行することができなくなりました。顧客は、インストーラーを実行する前に「sysadmin」ロールを追加します。

SQL スクリプトには、アプリケーション データベースの構築、CLR 関数の設定などを行うための SQL コマンドが含まれています。

コード ビハインドでは、C# から SQL を実行する次の標準的な方法を使用します。

/// <summary>
/// Execute the sql script from file
/// </summary>
/// <param name="serverName"></param>
/// <param name="user"></param>
/// <param name="password"></param>
/// <param name="dbName"></param>
/// <param name="Sql"></param>
private void ExecuteSql(string serverName, string user, string password, string dbName, string Sql)   
{   
    string connStr;
    string userName = user.Trim();

    // Check if Integrated security is used
    if (userName == "")
    {
        // Use integrated security
        connStr = "Data Source=" + serverName + ";Initial Catalog=" + dbName + ";Integrated Security=True";
    }
    else
    {
        // Use username and password
        connStr = "Data Source=" + serverName + ";Initial Catalog=" + dbName + ";Integrated Security=False;User Id=" + user + ";Password=" + password;
    }

    using (SqlConnection conn = new SqlConnection(connStr))   
    {   
        try  
        {
            Microsoft.SqlServer.Management.Smo.Server server = new Microsoft.SqlServer.Management.Smo.Server(new ServerConnection(conn));   
            server.ConnectionContext.ExecuteNonQuery(Sql);
            Log("Succeeded");
        }   
        catch (Exception ex)   
        {   
            Log(ex.ToString());   
        }   
    }   
}

SQL コマンドを実行するのに十分な権限を持つ MS SQL 2012 のアカウントを使用して、インストーラーから SQL コードを実行する他の方法があるかどうか疑問に思っていました。コマンド ウィンドウから SQL を実行しているように見えるいくつかのインストーラーを見てきましたが、SQL サーバーで SQL コマンドを実行できるアカウントを使用してこれらのコマンド ウィンドウを実行している可能性が最も高いですが、私は理解に失敗しました彼らがそれをどのように行っているか。

ヒントやヘルプは非常に高く評価されます。

下手な英語でごめんなさい。

4

1 に答える 1