DOBON.NETプログラミング道掲示板
(現在 過去ログ2 を表示中)

[ 最新記事及び返信フォームをトピックトップへ ]

■33482 / inTopicNo.1)  SQLをVBでUAC有効未昇格ClickOnceで操作したい
  
□投稿者/ Tino 一般人(1回)-(2016/09/23(Fri) 13:17:05)
  • アイコン環境/言語:[Win10 Visual Studio Community 2015 Visual Basic 2015 Express ] 
    分類:[.NET] 

    2016/09/24(Sat) 09:15:29 編集(投稿者)
    2016/09/24(Sat) 09:14:43 編集(投稿者)

    はじめましてお世話になります。

    OS:Windows10 

    Microsoft Visual Studio Community 2015
    Version 14.0.25425.01 Update 3

    Microsoft .NET Framework
    Version 4.6.01038

    Visual Basic 2015 Express において 
    UAC有効 未昇格 ClickOnceで

    SQLサーバーを操作したいと思っているのですが上手く行きません。

    いい方法がありましたらお教えいただけましたら幸いです。

    1.管理者へ昇格出来ればSQLサーバーは操作できるようです。
     ClickOnceでは RUNAS を使い 昇格するしかないのでしょうか?


    2.ソースは以下のようにしておりますが UAC有効 未昇格 の環境でも
     SQLサーバーを操作できる方法がありますでしょうか?

    *ClickOnceでのインストールフォルダに生成された setup.exe のコンテキストメニューで「管理者権限として実行」で起動すれば Sqlサーバーは操作できるんですが、
    今度は pictureboxへの画像のドラッグ&ドロップができなくなってしまいます。

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

    ------------------------------------------

    Dim SqlService As String = SrchService()

    StartSQL(SqlService)

    ------------------------------------------

    Public Function SrchService()

    Dim SqlServiceName As String = ""

    Dim scSvcs() As ServiceController = ServiceController.GetServices()

    ' Windowsサービスのサービス名を列挙する
    Dim sc As ServiceController = Nothing

    For Each sc In scSvcs
    If sc.DisplayName = "SQL Server (SQLEXPRESS)" Then
    SqlServiceName = sc.ServiceName
    Exit For
    End If
    Next

    Return SqlServiceName

    End Function


    Public Function StartSQL(myServiceName As String)
    Dim status As String
    Dim mySC As ServiceController

    mySC = New ServiceController(myServiceName)
    Try
    status = mySC.Status.ToString
    Catch ex As Exception
    Debug.Print("Service not found. It is probably not installed. [exception=" & ex.Message & "]")
    Return False
    End
    End Try

    If mySC.Status.Equals(ServiceControllerStatus.Stopped) Or mySC.Status.Equals(ServiceControllerStatus.StopPending) Then
    Try
    mySC.Start()
    mySC.WaitForStatus(ServiceControllerStatus.Running)
    Return True
    Catch ex As Exception
    Return False
    End Try
    End If

    Return True

    End Function







     
引用返信 削除キー/
■33483 / inTopicNo.2)  Re[1]: SQLをVBでUAC有効未昇格ClickOnceで操作したい
□投稿者/ Azulean 大御所(475回)-(2016/09/24(Sat) 10:37:33)
  • アイコンNo33482に返信(Tinoさんの記事)
    > Visual Basic 2015 Express において 
    > UAC有効 未昇格 ClickOnceで
    >
    > SQLサーバーを操作したいと思っているのですが上手く行きません。

    基本的に権限を持たないユーザーアカウントではサービスの開始・終了はできません。
    昇格するか、あらかじめ管理者権限を持つ状態で「特定のユーザーアカウント、あるいは権限を持たないユーザーアカウントでも操作可能にする」といった対処が必要になります。


    > 1.管理者へ昇格出来ればSQLサーバーは操作できるようです。
    >  ClickOnceでは RUNAS を使い 昇格するしかないのでしょうか?

    先にも述べましたが、管理者権限を得ないとどうしようもありません。


    > 2.ソースは以下のようにしておりますが UAC有効 未昇格 の環境でも
    >  SQLサーバーを操作できる方法がありますでしょうか?

    事前にセキュリティを弱める(サービスの開始・終了のコントロール権を一般ユーザーなどにも認める)ことをすればできるかと思いますが、マシンごとに設定が必要です。
    また、その設定には管理者権限(昇格)が必要です。

    試していませんが、見かけた記事として貼ってはおきます。
    認めるべきアカウントをよく考えないと、誰でも SQL Server を止められるようになるのでそういったセキュリティリスクもご理解ください。
    http://stackoverflow.com/questions/4436558/start-stop-a-windows-service-from-a-non-administrator-user-account


    > *ClickOnceでのインストールフォルダに生成された setup.exe のコンテキストメニューで「管理者権限として実行」で起動すれば Sqlサーバーは操作できるんですが、
    > 今度は pictureboxへの画像のドラッグ&ドロップができなくなってしまいます。

    Win32API の ChangeWindowMessageFilter で特定のメッセージを受け取るように変えればドラッグできるという話もあります。
    UAC や UIPI、ドラッグ&ドロップというキーワードで調べて、どうして阻害されているかという事情を理解し、問題ないと自己責任で判断される場合はそういった手を採れば良いかと思います。

    C++ ですが一例として。
    https://helgeklein.com/blog/2010/03/how-to-enable-drag-and-drop-for-an-elevated-mfc-application-on-vistawindows-7/
引用返信 削除キー/
■33484 / inTopicNo.3)  Re[2]: SQLをVBでUAC有効未昇格ClickOnceで操作したい
□投稿者/ Tino 一般人(2回)-(2016/09/25(Sun) 10:39:54)
  • アイコン2016/09/25(Sun) 13:19:59 編集(投稿者)
    2016/09/25(Sun) 13:19:51 編集(投稿者)

    No33483に返信(Azuleanさんの記事)
    > ■No33482に返信(Tinoさんの記事)
    Azuleanさん、ご指導 ありがとうございます。

    >管理者権限を得ないとどうしようもありません。

    おっしゃるとおりです。クリックワンスを使う限り、なおさらだと理解いたしました。

    >セキュリティリスクもご理解ください。
    >UAC や UIPI、ドラッグ&ドロップというキーワードで調べて、どうして阻害されているかという事情を理解

    お教えいただけたワードで検索し
    https://blogs.msdn.microsoft.com/tsmatsuz/2009/06/12/windows-7-uac/
    に、行き当たりました。

    引用始め

    UAC、そして昇格ダイアログ、「うざい !」、「うっとうしい !」 と思われる方もおられるかもしれませんが、そんな方はまずはお読みください。(UAC を回避したプログラムを書きたいですよね ? しかし、これを読み終えたあとで、その 「回避 ?!」 という考え方自体を変えて頂けるように整理したつもりです。)

    管理者権限で実行した notepad (メモ帳) や Visual Studio に対して、外のエクスプローラのウィンドウからファイルをドラッグアンドドロップしようとしても操作が無効になってしまう
    非常に不便に思うかもしれませんが、昇格ダイアログ自体に外のプログラムから自由にメッセージやキーボード入力を送信できてしまうような状況を想像して頂くと、非常に堅く守られている

    引用終わり

    素人の方をユーザーとして考えております関係もあり セキュリティを甘くすることは避けたいと思いましたので

    能力いっぱい現状できることで対応したいと思います。


    1.アプリケーションリファレンスで起動して SQLサーバーが起動していない場合は、エラーになるので

     一度だけ ClickOnceでのインストールフォルダに生成された setup.exe の
     コンテキストメニューで「管理者権限として実行」で起動・終了 するように指示を出す。

     あるいは 手動で サービス、SQLサーバーと開けてもらって 起動してもらう。

    2.UACを止める (爆

    3.Click Once以外の方法での配布方法を検討する。

    ・・・よりスマートな方法を今後も模索していきたいと思っております。ほんとうにありがとうございました。

解決み!
引用返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Mode/  Pass/


- Child Tree -