none
そもそもローカルのSQLServerにサーバー認証でログインする際のログイン名・パスワード名が不明。 RRS feed

  • 質問

  • 初質問です。

    題名の通り、そもそもローカルのSQLServerにWIndows認証ではなく、サーバー認証でログインする際の

    ログイン名・パスワードがわからないです。どのように調べればいいのか。どのようにすればログインできるのか。

    SQLManagementStudioからログインしようとしています。

    ご指導のほどよろしくお願いします。

    2019年11月21日 0:15

回答

  • > 画像イメージをここに貼れないのでわかりづらいかもですが、
    ページが重いのですが次の方法があるようです。

    下記リンクを開くとリンクの一覧が表示されると思います。

    Forums Issues (not product support)
    http://social.msdn.microsoft.com/Forums/en-US/home?forum=reportabug

    おそらく一覧の上の方に「Verify Account 42」という感じのタイトルがあると思いますので
    それを開きます(ものすごく重いです)。


    ここに「Reply」というリンクがあるので、これをクリックし
    次のように返信をするといいらしいです。

    [返信例]
    ------------------------------
    Hello

    PLEASE VERIFY MY ACCOUNT

    Thanks
    ------------------------------

    [参考リンク]
    https://social.msdn.microsoft.com/Forums/ja-JP/6644446f-8110-48a6-8d95-29050d33b7ae/26412259911239530011206871242012522125311246312434215471241612?forum=announceja

    今回のご質問の件となりますが、
    この回答を無視して頂いて構いません。

    そのうえで、私もsql serverには詳しくはないのですが、
    下記のテスト方法もあるようでしたので、記載させていただきます。

    trapemiya様のご質問から推測するとwindows認証ができない状況あると推測しました。

    「エラーとしては18456」について
    Connect SQL アクセス許可がない可能性があるようです。

    > インストール時にWindows認証のみでインストールしたのだと思います。
    > その際のパスワードも適当なまま、管理する事を怠ったのも響いています。
    もしかすると、ユーザごとに権限を付与していないのであれば
    次の方法によりsaのパスワードを変更できるかもしれません。
    ※あくまで可能性なので期待しないでください。

    > といってもVISUALSTUDIO2019のソースコード上ではADOでデータアクセスできるので
    C#でサンプルプログラムを作成してみました。
    ※私の試したVisual Studioは2015です(下記に環境は記載しております)。

    このプログラムでは次の内容を確認後、saユーザのパスワードを変更する方法となります。

    下記の手順により状態を確認後、saユーザのパスワードを変更できるかもしれません。
    (1) 現在のログインプロパティ(今回のケースではsaユーザ)を確認
    (2) ログインユーザ(今回のケースではwindows認証)としてsaの存在チェック
    (3) ログインユーザとしてsaがいること
    (4) saのConnect SQL権限のアクセス許可チェック
    上記の1から4が問題なければ
    今回対象としているsaのパスワードを変更できるかもしれません。

    方法としては次のSQLを実行することで変更するというものです。
    ALTER LOGIN ユーザID WITH PASSWORD = '変更したいパスワード';

    当方の環境では実行できましたが、責任は負いかねます。

    [テスト環境]
    windows 10 pro 64bit
    sql server 2016 express
    visual studio 2015 community

    実行する方法は提示したプログラムの下記部分を必要に応じて変更した後、
    実行してください。

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Data.SqlClient;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace test1
    {
        public partial class Form1 : Form
        {
            //接続文字列は適切な文字列に変更してください。
            //---------------------------------------------------------------------------------
            private const string con_connect_string = @"Data Source=localhost;integrated security=sspi;initial catalog=testdb";
            //---------------------------------------------------------------------------------
    
            //変更したユーザのパスワードを設定してください
            //private const string con_password = "Password0";
            private const string con_password = "Password1";
    
            //調べたいおよびパスワードを変更したいユーザidを設定してください
            private const string con_user = "sa";
    
            //ログインプロパティを調べる要素数
            private const int con_loginproperty_count = 5;
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                int no = 0;
                //0:現在のログインプロパティを確認
                //1:データベースのロールを確認
                //2:ログインユーザとしてsaの存在チェック
                //3:saのConnect SQL権限のアクセス許可チェック
                //ログインユーザとしてsaの存在チェック
                //上記の0から3が問題なければ4のsaのパスワードを変更を変更する手順を実行する方法があると思います。
                
                //4:saパスワードを変更
    
                test(no);
    
            }
            //現在のログインプロパティを確認
            private void test1(SqlCommand cmd)
            {
                string sql = string.Empty;
                for (int i = 0; i < con_loginproperty_count; i++)
                {
                    //ログインのプロパティを調べるSQLを取得
                    getLoginProperty(i, out sql);
                    cmd.CommandText = sql;
                    using (SqlDataReader dr = cmd.ExecuteReader())
                    {
                        while (dr.Read())
                        {
                            //ログインプロパティの結果
                            resultLoginProperty(i, dr);
                        }
                    }
                }
            }
            //データベースのロールを確認
            //[出力例]
            /*
            2. データベースのロールを確認
            role : db_owner name : dbo
            */
            private void test2(SqlCommand cmd)
            {
                string sql = string.Empty;
                //現在このプログラムでアクセスしているデータベースのロールを確認する
                getDatabaseRoll(out sql);
                cmd.CommandText = sql;
                using (SqlDataReader dr = cmd.ExecuteReader())
                {
                    while (dr.Read())
                    {
                        //データベースのロールを確認
                        Console.WriteLine("role : {0} name : {1}", (string)dr["role"], (string)dr["name"]);
                    }
                }
            }
            //ログインユーザとしてsaの存在チェック
            //[出力例]
            /*
            3. ログインユーザとしてsaの存在チェック
            name : sa
            type_desc : SQL_LOGIN
            type : COSQ
            permission_name : CONNECT SQL
            state : G
            state_desc : GRANT
            */
            private void test3(SqlCommand cmd)
            {
                string sql = string.Empty;
                //ログインユーザとしてsaの存在チェック
                existsLoginUser(out sql);
                cmd.CommandText = sql;
                using (SqlDataReader dr = cmd.ExecuteReader())
                {
                    while (dr.Read())
                    {
                        //データベースのロールを確認
                        Console.WriteLine("name : {0}", (string)dr["name"]);
                        Console.WriteLine("type_desc : {0}", (string)dr["type_desc"]);
                        Console.WriteLine("type : {0}", (string)dr["type"]);
                        Console.WriteLine("permission_name : {0}", (string)dr["permission_name"]);
                        Console.WriteLine("state : {0}", (string)dr["state"]);
                        Console.WriteLine("state_desc : {0}", (string)dr["state_desc"]);
                    }
                }
            }
            //saのConnect SQL権限のアクセス許可チェック
            //[出力例]
            /*
            4. saのConnect SQL権限のアクセス許可チェック
            loginname : sa
            */
            private void test4(SqlCommand cmd)
            {
                string sql = string.Empty;
                //ログインユーザとしてsaの存在チェック
                checkConnectSQL(out sql);
                cmd.CommandText = sql;
                int count = 0;
                using (SqlDataReader dr = cmd.ExecuteReader())
                {
                    while (dr.Read())
                    {
                        //ログインユーザの存在を確認
                        Console.WriteLine("loginname : {0}", (string)dr["loginname"]);
                        count = 1;
                    }
                    if (count < 1)
                    {
                        Console.WriteLine("指定したログインが存在しません。");
                    }
                }
            }
            //4:saパスワードを変更
            //このアクセスしているユーザで指定したユーザのパスワードを変更します。
            private void test5(SqlCommand cmd)
            {
                string sql = string.Empty;
                //指定したユーザのパスワードを変更
                alterLoginPassword(out sql);
                cmd.CommandText = sql;
                cmd.ExecuteNonQuery();
            }
            private void test(int no)
            {
    
                string cn = string.Empty;
    
                //接続文字列
                cn = con_connect_string;
                using (var cnn = new SqlConnection(cn))
                {
                    using (var cmd = cnn.CreateCommand())
                    {
                        try
                        {
                            cnn.Open();
                            if (no < 1)
                            {
                                //現在のログインプロパティを確認
                                Console.WriteLine("1. 現在のログインプロパティを確認");
                                test1(cmd);
                            }
                            else if (no < 2)
                            {
                                //データベースのロールを確認
                                Console.WriteLine("2. データベースのロールを確認");
                                test2(cmd);
                            }
                            else if (no < 3)
                            {
                                //ログインユーザとしてsaの存在チェック
                                Console.WriteLine("3. ログインユーザとしてsaの存在チェック");
                                test3(cmd);
                            }
                            else if (no < 4)
                            {
                                //saのConnect SQL権限のアクセス許可チェック
                                Console.WriteLine("4. saのConnect SQL権限のアクセス許可チェック");
                                test4(cmd);
                            }
                            else if (no < 5)
                            {
                                //saパスワードを変更
                                Console.WriteLine("5. saパスワードを変更");
                                test5(cmd);
                            }
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ex.Message);
                        }
                        finally
                        {
                            cnn.Close();
                        }
                    }
                }
            }
            //ログインのプロパティを調べるSQLを取得
            //[出力例]
            /*
            1. 現在のログインプロパティを確認
            (1) パスワードの有効期限
            オペレーティングシステムがパスワードポリシーをサポートしていません。
            (2) ログインの期限が切れているかどうか
            ログインの期限は切れていません。
            (3) ログインがロックされているか
            ログインがロックされていません。
            (4) 次回の接続にパスワード変更の必要性
            次回の接続にパスワードの変更は必要ありません。
            (5) 現在のパスワードが設定されて日付
            現在のパスワードが設定された年月日 : 2019年11月06日        
            */
            private void getLoginProperty(int no, out string sql)
            {
                sql = @"";
                if (no < 1)
                {
                    //パスワードの有効期限
                    //sql = @"select loginproperty('sa','DaysUntilExpiration') as result";
                    sql = string.Format("select loginproperty('{0}','DaysUntilExpiration') as result", con_user);
                }
                else if (no < 2)
                {
                    //ログインの期限が切れているかどうか
                    sql = string.Format("select loginproperty('{0}','IsExpired') as result", con_user);
                }
                else if (no < 3)
                {
                    //ログインがロックされているか
                    sql = string.Format("select loginproperty('{0}','IsLocked') as result", con_user);
                }
                else if (no < 4)
                {
                    //次回の接続にパスワード変更の必要性
                    sql = string.Format("select loginproperty('{0}','IsMustChange') as result", con_user);
                }
                else if (no < 5)
                {
                    //現在のパスワードが設定されて日付
                    sql = string.Format("select loginproperty('{0}','PasswordLastSetTime') as result", con_user);
                }
            }
            //ログインプロパティの結果
            private void resultLoginProperty(int no,  SqlDataReader dr)
            {
                int result = 0;
                if(no < 1)
                {
                    //パスワードの有効期限
                    Console.WriteLine("(1) パスワードの有効期限");
                    if (dr["result"] != DBNull.Value)
                    {
                        result = (int)dr["result"];
                        if (result < 0)
                        {
                            Console.WriteLine("パスワードの有効期限は無期限です。");
                        }
                        else
                        {
                            Console.WriteLine("パスワードの有効期限は{0}日です。", dr.GetInt64(0));
                        }
                    }
                    else
                    {
                        Console.WriteLine("オペレーティングシステムがパスワードポリシーをサポートしていません。");
                    }
                }
                else if(no < 2)
                {
                    //ログインの期限が切れているかどうか
                    Console.WriteLine("(2) ログインの期限が切れているかどうか");
                    if (dr["result"] != DBNull.Value)
                    {
                        result = (int)dr["result"];
                        if (result < 1)
                        {
                            Console.WriteLine("ログインの期限は切れていません。");
                        }
                        else
                        {
                            Console.WriteLine("ログインの期限が切れています。");
                        }
                    }
                    else
                    {
                        Console.WriteLine("ログインの期限判定処理をサポートしていません。");
                    }
                }
                else if (no < 3)
                {
                    //ログインがロックされているか
                    Console.WriteLine("(3) ログインがロックされているか");
                    if (dr["result"] != DBNull.Value)
                    {
                        result = (int)dr["result"];
                        if (result < 1)
                        {
                            Console.WriteLine("ログインがロックされていません。");
                        }
                        else
                        {
                            Console.WriteLine("ログインがロックされている状態です。");
                        }
                    }
                    else
                    {
                        Console.WriteLine("ログインのロック判定処理をサポートしていません。");
                    }
                }
                else if (no < 4)
                {
                    //次回の接続にパスワード変更の必要性
                    Console.WriteLine("(4) 次回の接続にパスワード変更の必要性");
                    if (dr["result"] != DBNull.Value)
                    {
                        result = (int)dr["result"];
                        if (result < 1)
                        {
                            Console.WriteLine("次回の接続にパスワードの変更は必要ありません。");
                        }
                        else
                        {
                            Console.WriteLine("次回の接続にパスワードの変更は必要です。");
                        }
                    }
                    else
                    {
                        Console.WriteLine("次回の接続にパスワードの必要の有無に対する判定処理をサポートしていません。");
                    }
                }
                else if (no < 5)
                {
                    //現在のパスワードが設定されて日付
                    Console.WriteLine("(5) 現在のパスワードが設定されて日付");
                    if (dr["result"] != DBNull.Value)
                    {
                        Console.WriteLine("現在のパスワードが設定された年月日 : {0}",Convert.ToDateTime(dr["result"]).ToString("yyyy年MM月dd日"));
                    }
                    else
                    {
                        Console.WriteLine("現在のパスワードが設定された年月日を判定する処理はサポートしていません。");
                    }
                }
            }
            //現在このプログラムでアクセスしているデータベースのロールを確認する
            private void getDatabaseRoll(out string sql)
            {
                StringBuilder sr = new StringBuilder();
                sr.Append(" select");
                sr.Append(" sysusers_1.name as role,");
                sr.Append(" sysusers.name as name");
                sr.Append(" from");
                sr.Append(" sysmembers inner join sysusers on sysmembers.memberuid = sysusers.uid");
                sr.Append(" inner join sysusers sysusers_1 on sysmembers.groupuid = sysusers_1.uid");
                sr.Append(" order by");
                sr.Append(" sysusers_1.name,");
                sr.Append(" sysusers.name");
                sql = sr.ToString();
            }
            //ログインユーザとしてsaの存在チェック
            private void existsLoginUser(out string sql)
            {
                StringBuilder sr = new StringBuilder();
                sr.Append(" select");
                sr.Append(" t2.name,");
                sr.Append(" t2.type_desc,");
                sr.Append(" t1.type,");
                sr.Append(" t1.permission_name,");
                sr.Append(" t1.state,");
                sr.Append(" t1.state_desc");
                sr.Append(" from");
                sr.Append(" sys.server_permissions t1");
                sr.Append(" left join");
                sr.Append(" sys.server_principals t2");
                sr.Append(" on");
                sr.Append(" t1.grantee_principal_id = t2.principal_id");
                sr.AppendFormat(" where name = '{0}'", con_user);
                sr.Append(" order by state_desc");
                sql = sr.ToString();
            }
            //saのConnect SQL権限のアクセス許可チェック
            private void checkConnectSQL(out string sql)
            {
                sql = string.Format("select loginname from syslogins where name='{0}'", con_user);
            }
            //指定したユーザのパスワードを変更
            private void alterLoginPassword(out string sql)
            {
                sql = string.Format("ALTER LOGIN {0} WITH PASSWORD = '{1}'", con_user, con_password);
            }
        }
    }

    上記プログラムは、windows formにボタンをドラッグドロップしてボタンをダブルクリックした状態に

    上記プログラムを入力したものとなります。

    ----------------------------
    1. 接続文字列
    ----------------------------
    下記のステップが該当部分です。
    おそらく変更するのは次の2か所になると思います。
    (1) Data Sourceの「localhost」
    (2) catalogの「testdb」

    //接続文字列は適切な文字列に変更してください。
    //---------------------------------------------------------------------------------
    private const string con_connect_string = @"Data Source=localhost;integrated security=sspi;initial catalog=testdb";
    //---------------------------------------------------------------------------------

    ----------------------------
    2. 変更したいパスワード
    ----------------------------
    このパスワードが変更されるパスワードとなります。
    このサンプルではsaユーザが「Password1」になりました。

    //変更したユーザのパスワードを設定してください
    //private const string con_password = "Password0";
    private const string con_password = "Password1";

    ----------------------------
    3. 変更したいユーザ
    ----------------------------
    ここではsaユーザが対象となるので変更の必要はないと思います。

    //調べたいおよびパスワードを変更したいユーザidを設定してください
    private const string con_user = "sa";

    ----------------------------
    4. 実行するイベントの実行番号
    ----------------------------
    int noの部分を
    int no = 0;
    int no = 1;
    int no = 2;
    int no = 3;
    int no = 4;
    というように変更して実行していただくことになります。
    noの値を0から3まで確認いただき、問題がないようであれば
    noを4にして実行していただくことになると思います。

    private void button1_Click(object sender, EventArgs e)
    {
        int no = 0;
        //0:現在のログインプロパティを確認
        //1:データベースのロールを確認
        //2:ログインユーザとしてsaの存在チェック
        //3:saのConnect SQL権限のアクセス許可チェック
        //ログインユーザとしてsaの存在チェック
        //上記の0から3が問題なければ4のsaのパスワードを変更を変更する手順を実行する方法があると思います。
        
        //4:saパスワードを変更
    
        test(no);
    
    }

    私が回答できそうなことは上記程度ですが、
    上記でなんとかなりそうで、質問がクローズするようであれば
    返信で解決済みとしてDeveloperHide様自信にサインをして投票して質問をクローズしてください。

    これはやめておく、または、こんなことを知りたい等という感じの説明してくださると
    このサイトはsql serverに詳しい方々が大勢いらっしゃるので
    お力添えをしてくださると思います。
    他の回答者が参考になった場合は他の回答者にサインをして投票して質問をクローズしてくださいね。


    それでは。























    • 編集済み msuser_forum 2019年12月12日 14:52 誤字訂正:プログラムのコメントを[出動結果]から[出力例]に修正
    • 回答としてマーク DeveloperHide 2019年12月13日 4:07
    2019年12月12日 14:47

すべての返信

  • SQL Serverをインストールする際にパスワードを決めているはずです。また、インストール時にSQL Server認証が可能なように設定する必要があります。

    Windows認証でログインできるのであれば、まず、SQL Server認証が可能になっているかどうか確認してみて下さい。SQL Server Management Studioのオブジェクトエクスプローラで一番上のサーバー名のところで右クリックし、「セキュリティ」で確認できます。
    同様に、saでログイン可能になっているかは、saのプロパティで状態を確認してみて下さい。なお、saのプロパティでログインパスワードを変更することが可能です。
    もし、SQL Server認証が有効になっていない場合、以下を参考にしてみて下さい。

    サーバーの認証モードの変更
    https://docs.microsoft.com/ja-jp/sql/database-engine/configure-windows/change-server-authentication-mode?view=sql-server-ver15


    ★良い回答には質問者は回答済みマークを、閲覧者は投票を!

    2019年11月21日 0:44
  • SQL Server のバージョンは何でしょうか?

    SQL Server のインストール時には、「Windows 認証モードのみ」か「混合認証(SQL Server 認証 + Windows 認証)」のいずれかを指定していたはずです。

    インストール後に変更することも可能ですが、そもそもサーバー側で混合認証が指定されていない状態だとすれば、SQL Server 認証でのログインは出来ず、Windows 認証で接続することになります。

    インストール時に混合認証が選択されていた場合、特にユーザーを追加していなければ "sa" という管理者アカウントが存在しますので、これを使ってログインすることができます(パスワードはインストール時に指定したものを利用してください)。

    ただし、最初に Windows 認証でインストールしてから混合認証に変更した場合、"sa" は存在しているものの、初期状態では無効状態に設定されています。

    今回はローカルの SQL Server とのことなので、常に Windows 認証でのログインが可能だと思います。まずは、Windows Server に対してローカル管理者アカウントを用いてログオン(サインイン)し、そこで SQL Server Management Studio を起動して「Windows 認証」でログインできるか確認してみてください。ログインできるようなら、SQL Server 認証用の管理者ユーザーの追加(あるいは sa パスワードの再発行)を行えるかと思います。SQL Server Management Studio からは、オブジェクト エクスプローラーの [セキュリティ]-[ログイン] から操作できます。

    2019年11月21日 0:58
  • 返信ありがとうございます。

    インストール時にWindows認証のみでインストールしたのだと思います。その際のパスワードも適当なまま、管理する事を怠ったのも響いています。

    リンク先のページの通り、設定で両方の認証モードでログインできるように設定し、saの方でも設定し、更にスクリプトでパスワードを再設定しなおしました。OSを再起動してSQL Server Management Studio2019で、SQLServer認証ログインをしました。

    SQL Server Error:233

    で「サーバーとの接続は確立しましたが、ログイン中にエラー」が返ってきました。

    現在、調査中です。 

    2019年11月21日 2:09
  • SQL Server Management Studio からの接続は、SQL Server がインストールされている OS 上から行っていますか? それとも、別の端末からでしょうか。

    別端末から利用する場合、SQL Server 構成マネージャーでリモート接続が許可されていないと、Error: 233 が返されることがあります。SQL Server 構成マネージャーで、サーバー側で許可している DB のプロトコルも確認しておいてください。

    2019年11月21日 2:24
  • 返信ありがとうございます。

    SQL Server Management Studio からの接続はローカルマシンからの接続です。SQL Server2017もローカルに置いています。

    同ホスト接続ですね。さて、構成マネージャーで許可しているプロトコルは共有メモリのみでしたので、TCPを有効化し、名前付きパイプも有効化しサービスを再起動しました。その後、マネージメントスタジオからの再接続を試行しましたが、

    まだうまくいかずという(同じエラー233が返される。)現状です。

    少し時間を置いてまた試みることにします。

    2019年11月21日 2:48
  • DeveloperHideさん、こんにちは。フォーラムオペレーターのHarukaです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    ご質問の件ですが、その後はいかがでしょうか。
    前回の返信で言及した最後の操作で、どのような詳細なエラーメッセージが表示されましたか。 
    Windowsアカウント、またはSQLアカウントのどれを使用してSQL Serverにログインしていますか。

    どうぞよろしくお願いいたします。

    MSDN/ TechNet Community Support Haruka
    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2019年11月26日 7:33
    モデレータ
  • SQLサーバー認証ではいまだにログインできない現状です。

    画像イメージをここに貼れないのでわかりづらいかもですが、

    エラーとしては18456を返しています。

    といってもVISUALSTUDIO2019のソースコード上ではADOでデータアクセスできるので

    問題ないといえばないんですが。

    2019年12月11日 15:58
  • > 画像イメージをここに貼れないのでわかりづらいかもですが、
    ページが重いのですが次の方法があるようです。

    下記リンクを開くとリンクの一覧が表示されると思います。

    Forums Issues (not product support)
    http://social.msdn.microsoft.com/Forums/en-US/home?forum=reportabug

    おそらく一覧の上の方に「Verify Account 42」という感じのタイトルがあると思いますので
    それを開きます(ものすごく重いです)。


    ここに「Reply」というリンクがあるので、これをクリックし
    次のように返信をするといいらしいです。

    [返信例]
    ------------------------------
    Hello

    PLEASE VERIFY MY ACCOUNT

    Thanks
    ------------------------------

    [参考リンク]
    https://social.msdn.microsoft.com/Forums/ja-JP/6644446f-8110-48a6-8d95-29050d33b7ae/26412259911239530011206871242012522125311246312434215471241612?forum=announceja

    今回のご質問の件となりますが、
    この回答を無視して頂いて構いません。

    そのうえで、私もsql serverには詳しくはないのですが、
    下記のテスト方法もあるようでしたので、記載させていただきます。

    trapemiya様のご質問から推測するとwindows認証ができない状況あると推測しました。

    「エラーとしては18456」について
    Connect SQL アクセス許可がない可能性があるようです。

    > インストール時にWindows認証のみでインストールしたのだと思います。
    > その際のパスワードも適当なまま、管理する事を怠ったのも響いています。
    もしかすると、ユーザごとに権限を付与していないのであれば
    次の方法によりsaのパスワードを変更できるかもしれません。
    ※あくまで可能性なので期待しないでください。

    > といってもVISUALSTUDIO2019のソースコード上ではADOでデータアクセスできるので
    C#でサンプルプログラムを作成してみました。
    ※私の試したVisual Studioは2015です(下記に環境は記載しております)。

    このプログラムでは次の内容を確認後、saユーザのパスワードを変更する方法となります。

    下記の手順により状態を確認後、saユーザのパスワードを変更できるかもしれません。
    (1) 現在のログインプロパティ(今回のケースではsaユーザ)を確認
    (2) ログインユーザ(今回のケースではwindows認証)としてsaの存在チェック
    (3) ログインユーザとしてsaがいること
    (4) saのConnect SQL権限のアクセス許可チェック
    上記の1から4が問題なければ
    今回対象としているsaのパスワードを変更できるかもしれません。

    方法としては次のSQLを実行することで変更するというものです。
    ALTER LOGIN ユーザID WITH PASSWORD = '変更したいパスワード';

    当方の環境では実行できましたが、責任は負いかねます。

    [テスト環境]
    windows 10 pro 64bit
    sql server 2016 express
    visual studio 2015 community

    実行する方法は提示したプログラムの下記部分を必要に応じて変更した後、
    実行してください。

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Data.SqlClient;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace test1
    {
        public partial class Form1 : Form
        {
            //接続文字列は適切な文字列に変更してください。
            //---------------------------------------------------------------------------------
            private const string con_connect_string = @"Data Source=localhost;integrated security=sspi;initial catalog=testdb";
            //---------------------------------------------------------------------------------
    
            //変更したユーザのパスワードを設定してください
            //private const string con_password = "Password0";
            private const string con_password = "Password1";
    
            //調べたいおよびパスワードを変更したいユーザidを設定してください
            private const string con_user = "sa";
    
            //ログインプロパティを調べる要素数
            private const int con_loginproperty_count = 5;
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                int no = 0;
                //0:現在のログインプロパティを確認
                //1:データベースのロールを確認
                //2:ログインユーザとしてsaの存在チェック
                //3:saのConnect SQL権限のアクセス許可チェック
                //ログインユーザとしてsaの存在チェック
                //上記の0から3が問題なければ4のsaのパスワードを変更を変更する手順を実行する方法があると思います。
                
                //4:saパスワードを変更
    
                test(no);
    
            }
            //現在のログインプロパティを確認
            private void test1(SqlCommand cmd)
            {
                string sql = string.Empty;
                for (int i = 0; i < con_loginproperty_count; i++)
                {
                    //ログインのプロパティを調べるSQLを取得
                    getLoginProperty(i, out sql);
                    cmd.CommandText = sql;
                    using (SqlDataReader dr = cmd.ExecuteReader())
                    {
                        while (dr.Read())
                        {
                            //ログインプロパティの結果
                            resultLoginProperty(i, dr);
                        }
                    }
                }
            }
            //データベースのロールを確認
            //[出力例]
            /*
            2. データベースのロールを確認
            role : db_owner name : dbo
            */
            private void test2(SqlCommand cmd)
            {
                string sql = string.Empty;
                //現在このプログラムでアクセスしているデータベースのロールを確認する
                getDatabaseRoll(out sql);
                cmd.CommandText = sql;
                using (SqlDataReader dr = cmd.ExecuteReader())
                {
                    while (dr.Read())
                    {
                        //データベースのロールを確認
                        Console.WriteLine("role : {0} name : {1}", (string)dr["role"], (string)dr["name"]);
                    }
                }
            }
            //ログインユーザとしてsaの存在チェック
            //[出力例]
            /*
            3. ログインユーザとしてsaの存在チェック
            name : sa
            type_desc : SQL_LOGIN
            type : COSQ
            permission_name : CONNECT SQL
            state : G
            state_desc : GRANT
            */
            private void test3(SqlCommand cmd)
            {
                string sql = string.Empty;
                //ログインユーザとしてsaの存在チェック
                existsLoginUser(out sql);
                cmd.CommandText = sql;
                using (SqlDataReader dr = cmd.ExecuteReader())
                {
                    while (dr.Read())
                    {
                        //データベースのロールを確認
                        Console.WriteLine("name : {0}", (string)dr["name"]);
                        Console.WriteLine("type_desc : {0}", (string)dr["type_desc"]);
                        Console.WriteLine("type : {0}", (string)dr["type"]);
                        Console.WriteLine("permission_name : {0}", (string)dr["permission_name"]);
                        Console.WriteLine("state : {0}", (string)dr["state"]);
                        Console.WriteLine("state_desc : {0}", (string)dr["state_desc"]);
                    }
                }
            }
            //saのConnect SQL権限のアクセス許可チェック
            //[出力例]
            /*
            4. saのConnect SQL権限のアクセス許可チェック
            loginname : sa
            */
            private void test4(SqlCommand cmd)
            {
                string sql = string.Empty;
                //ログインユーザとしてsaの存在チェック
                checkConnectSQL(out sql);
                cmd.CommandText = sql;
                int count = 0;
                using (SqlDataReader dr = cmd.ExecuteReader())
                {
                    while (dr.Read())
                    {
                        //ログインユーザの存在を確認
                        Console.WriteLine("loginname : {0}", (string)dr["loginname"]);
                        count = 1;
                    }
                    if (count < 1)
                    {
                        Console.WriteLine("指定したログインが存在しません。");
                    }
                }
            }
            //4:saパスワードを変更
            //このアクセスしているユーザで指定したユーザのパスワードを変更します。
            private void test5(SqlCommand cmd)
            {
                string sql = string.Empty;
                //指定したユーザのパスワードを変更
                alterLoginPassword(out sql);
                cmd.CommandText = sql;
                cmd.ExecuteNonQuery();
            }
            private void test(int no)
            {
    
                string cn = string.Empty;
    
                //接続文字列
                cn = con_connect_string;
                using (var cnn = new SqlConnection(cn))
                {
                    using (var cmd = cnn.CreateCommand())
                    {
                        try
                        {
                            cnn.Open();
                            if (no < 1)
                            {
                                //現在のログインプロパティを確認
                                Console.WriteLine("1. 現在のログインプロパティを確認");
                                test1(cmd);
                            }
                            else if (no < 2)
                            {
                                //データベースのロールを確認
                                Console.WriteLine("2. データベースのロールを確認");
                                test2(cmd);
                            }
                            else if (no < 3)
                            {
                                //ログインユーザとしてsaの存在チェック
                                Console.WriteLine("3. ログインユーザとしてsaの存在チェック");
                                test3(cmd);
                            }
                            else if (no < 4)
                            {
                                //saのConnect SQL権限のアクセス許可チェック
                                Console.WriteLine("4. saのConnect SQL権限のアクセス許可チェック");
                                test4(cmd);
                            }
                            else if (no < 5)
                            {
                                //saパスワードを変更
                                Console.WriteLine("5. saパスワードを変更");
                                test5(cmd);
                            }
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ex.Message);
                        }
                        finally
                        {
                            cnn.Close();
                        }
                    }
                }
            }
            //ログインのプロパティを調べるSQLを取得
            //[出力例]
            /*
            1. 現在のログインプロパティを確認
            (1) パスワードの有効期限
            オペレーティングシステムがパスワードポリシーをサポートしていません。
            (2) ログインの期限が切れているかどうか
            ログインの期限は切れていません。
            (3) ログインがロックされているか
            ログインがロックされていません。
            (4) 次回の接続にパスワード変更の必要性
            次回の接続にパスワードの変更は必要ありません。
            (5) 現在のパスワードが設定されて日付
            現在のパスワードが設定された年月日 : 2019年11月06日        
            */
            private void getLoginProperty(int no, out string sql)
            {
                sql = @"";
                if (no < 1)
                {
                    //パスワードの有効期限
                    //sql = @"select loginproperty('sa','DaysUntilExpiration') as result";
                    sql = string.Format("select loginproperty('{0}','DaysUntilExpiration') as result", con_user);
                }
                else if (no < 2)
                {
                    //ログインの期限が切れているかどうか
                    sql = string.Format("select loginproperty('{0}','IsExpired') as result", con_user);
                }
                else if (no < 3)
                {
                    //ログインがロックされているか
                    sql = string.Format("select loginproperty('{0}','IsLocked') as result", con_user);
                }
                else if (no < 4)
                {
                    //次回の接続にパスワード変更の必要性
                    sql = string.Format("select loginproperty('{0}','IsMustChange') as result", con_user);
                }
                else if (no < 5)
                {
                    //現在のパスワードが設定されて日付
                    sql = string.Format("select loginproperty('{0}','PasswordLastSetTime') as result", con_user);
                }
            }
            //ログインプロパティの結果
            private void resultLoginProperty(int no,  SqlDataReader dr)
            {
                int result = 0;
                if(no < 1)
                {
                    //パスワードの有効期限
                    Console.WriteLine("(1) パスワードの有効期限");
                    if (dr["result"] != DBNull.Value)
                    {
                        result = (int)dr["result"];
                        if (result < 0)
                        {
                            Console.WriteLine("パスワードの有効期限は無期限です。");
                        }
                        else
                        {
                            Console.WriteLine("パスワードの有効期限は{0}日です。", dr.GetInt64(0));
                        }
                    }
                    else
                    {
                        Console.WriteLine("オペレーティングシステムがパスワードポリシーをサポートしていません。");
                    }
                }
                else if(no < 2)
                {
                    //ログインの期限が切れているかどうか
                    Console.WriteLine("(2) ログインの期限が切れているかどうか");
                    if (dr["result"] != DBNull.Value)
                    {
                        result = (int)dr["result"];
                        if (result < 1)
                        {
                            Console.WriteLine("ログインの期限は切れていません。");
                        }
                        else
                        {
                            Console.WriteLine("ログインの期限が切れています。");
                        }
                    }
                    else
                    {
                        Console.WriteLine("ログインの期限判定処理をサポートしていません。");
                    }
                }
                else if (no < 3)
                {
                    //ログインがロックされているか
                    Console.WriteLine("(3) ログインがロックされているか");
                    if (dr["result"] != DBNull.Value)
                    {
                        result = (int)dr["result"];
                        if (result < 1)
                        {
                            Console.WriteLine("ログインがロックされていません。");
                        }
                        else
                        {
                            Console.WriteLine("ログインがロックされている状態です。");
                        }
                    }
                    else
                    {
                        Console.WriteLine("ログインのロック判定処理をサポートしていません。");
                    }
                }
                else if (no < 4)
                {
                    //次回の接続にパスワード変更の必要性
                    Console.WriteLine("(4) 次回の接続にパスワード変更の必要性");
                    if (dr["result"] != DBNull.Value)
                    {
                        result = (int)dr["result"];
                        if (result < 1)
                        {
                            Console.WriteLine("次回の接続にパスワードの変更は必要ありません。");
                        }
                        else
                        {
                            Console.WriteLine("次回の接続にパスワードの変更は必要です。");
                        }
                    }
                    else
                    {
                        Console.WriteLine("次回の接続にパスワードの必要の有無に対する判定処理をサポートしていません。");
                    }
                }
                else if (no < 5)
                {
                    //現在のパスワードが設定されて日付
                    Console.WriteLine("(5) 現在のパスワードが設定されて日付");
                    if (dr["result"] != DBNull.Value)
                    {
                        Console.WriteLine("現在のパスワードが設定された年月日 : {0}",Convert.ToDateTime(dr["result"]).ToString("yyyy年MM月dd日"));
                    }
                    else
                    {
                        Console.WriteLine("現在のパスワードが設定された年月日を判定する処理はサポートしていません。");
                    }
                }
            }
            //現在このプログラムでアクセスしているデータベースのロールを確認する
            private void getDatabaseRoll(out string sql)
            {
                StringBuilder sr = new StringBuilder();
                sr.Append(" select");
                sr.Append(" sysusers_1.name as role,");
                sr.Append(" sysusers.name as name");
                sr.Append(" from");
                sr.Append(" sysmembers inner join sysusers on sysmembers.memberuid = sysusers.uid");
                sr.Append(" inner join sysusers sysusers_1 on sysmembers.groupuid = sysusers_1.uid");
                sr.Append(" order by");
                sr.Append(" sysusers_1.name,");
                sr.Append(" sysusers.name");
                sql = sr.ToString();
            }
            //ログインユーザとしてsaの存在チェック
            private void existsLoginUser(out string sql)
            {
                StringBuilder sr = new StringBuilder();
                sr.Append(" select");
                sr.Append(" t2.name,");
                sr.Append(" t2.type_desc,");
                sr.Append(" t1.type,");
                sr.Append(" t1.permission_name,");
                sr.Append(" t1.state,");
                sr.Append(" t1.state_desc");
                sr.Append(" from");
                sr.Append(" sys.server_permissions t1");
                sr.Append(" left join");
                sr.Append(" sys.server_principals t2");
                sr.Append(" on");
                sr.Append(" t1.grantee_principal_id = t2.principal_id");
                sr.AppendFormat(" where name = '{0}'", con_user);
                sr.Append(" order by state_desc");
                sql = sr.ToString();
            }
            //saのConnect SQL権限のアクセス許可チェック
            private void checkConnectSQL(out string sql)
            {
                sql = string.Format("select loginname from syslogins where name='{0}'", con_user);
            }
            //指定したユーザのパスワードを変更
            private void alterLoginPassword(out string sql)
            {
                sql = string.Format("ALTER LOGIN {0} WITH PASSWORD = '{1}'", con_user, con_password);
            }
        }
    }

    上記プログラムは、windows formにボタンをドラッグドロップしてボタンをダブルクリックした状態に

    上記プログラムを入力したものとなります。

    ----------------------------
    1. 接続文字列
    ----------------------------
    下記のステップが該当部分です。
    おそらく変更するのは次の2か所になると思います。
    (1) Data Sourceの「localhost」
    (2) catalogの「testdb」

    //接続文字列は適切な文字列に変更してください。
    //---------------------------------------------------------------------------------
    private const string con_connect_string = @"Data Source=localhost;integrated security=sspi;initial catalog=testdb";
    //---------------------------------------------------------------------------------

    ----------------------------
    2. 変更したいパスワード
    ----------------------------
    このパスワードが変更されるパスワードとなります。
    このサンプルではsaユーザが「Password1」になりました。

    //変更したユーザのパスワードを設定してください
    //private const string con_password = "Password0";
    private const string con_password = "Password1";

    ----------------------------
    3. 変更したいユーザ
    ----------------------------
    ここではsaユーザが対象となるので変更の必要はないと思います。

    //調べたいおよびパスワードを変更したいユーザidを設定してください
    private const string con_user = "sa";

    ----------------------------
    4. 実行するイベントの実行番号
    ----------------------------
    int noの部分を
    int no = 0;
    int no = 1;
    int no = 2;
    int no = 3;
    int no = 4;
    というように変更して実行していただくことになります。
    noの値を0から3まで確認いただき、問題がないようであれば
    noを4にして実行していただくことになると思います。

    private void button1_Click(object sender, EventArgs e)
    {
        int no = 0;
        //0:現在のログインプロパティを確認
        //1:データベースのロールを確認
        //2:ログインユーザとしてsaの存在チェック
        //3:saのConnect SQL権限のアクセス許可チェック
        //ログインユーザとしてsaの存在チェック
        //上記の0から3が問題なければ4のsaのパスワードを変更を変更する手順を実行する方法があると思います。
        
        //4:saパスワードを変更
    
        test(no);
    
    }

    私が回答できそうなことは上記程度ですが、
    上記でなんとかなりそうで、質問がクローズするようであれば
    返信で解決済みとしてDeveloperHide様自信にサインをして投票して質問をクローズしてください。

    これはやめておく、または、こんなことを知りたい等という感じの説明してくださると
    このサイトはsql serverに詳しい方々が大勢いらっしゃるので
    お力添えをしてくださると思います。
    他の回答者が参考になった場合は他の回答者にサインをして投票して質問をクローズしてくださいね。


    それでは。























    • 編集済み msuser_forum 2019年12月12日 14:52 誤字訂正:プログラムのコメントを[出動結果]から[出力例]に修正
    • 回答としてマーク DeveloperHide 2019年12月13日 4:07
    2019年12月12日 14:47