ソフトウェア用の 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 コマンドを実行できるアカウントを使用してこれらのコマンド ウィンドウを実行している可能性が最も高いですが、私は理解に失敗しました彼らがそれをどのように行っているか。
ヒントやヘルプは非常に高く評価されます。
下手な英語でごめんなさい。