none
アクセス権限チェック RRS feed

  • 質問

  • みなさん、

    お疲れ様です。

    あるフォルダ(ファイル)に現在のユーザーがアクセス権限あるかどうか確認したいです。

    アクセス権限を追加出来ていますが追加する前に確認してないやつだけ追加する為です。

    vb.netの詳しい方いらしゃいましたら教えていただけますでしょうか。


    • 編集済み Luky9 2019年6月12日 6:21
    2019年6月12日 6:17

回答

  • 既存ファイルやフォルダーの権限をアプリケーション側で編集するのは、聊か乱暴すぎるように思えます。本当にアクセス権を変更する必要があるのでしょうか。
    何のためにそのフォルダーにアクセスしたいのかは分かりませんが、アプローチが間違っている印象を受けました。

    C:\Windows\Prefetch の NTFS アクセス権は、既定で下記の状態になっているはずです。

    • BUILTIN\Administrators:F
    • BUILTIN\Administrators:(OI)(CI)(IO)F

    なのでたとえば:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        ListBox1.DataSource = My.Computer.FileSystem.GetFiles("C:\Windows\Prefetch").ToArray()
    End Sub

    のようなコードを実行した場合、下記の動作になるはずです。

    • 管理者として実行 → 正しく列挙される
    • そのまま起動 → 権限不足により UnauthorizedAccessException の例外になる


    アプリケーションが常に管理者として実行されるようにしたいなら、アプリケーション マニフェストにて、requestedExecutionLevel 要素の level を "requireAdministrator" に設定しておくことができます。

    あるいは、普段は一般ユーザー権限で利用させておき、特定の機能だけを管理者権限で実行させたい場合には、"runas" 動詞にてプロセスを実行させる方法が使えます。

    常に管理者としてアプリケーションを実行させるには?

    管理者としてほかのアプリケーションを実行するには?

    必要な処理だけ管理者に昇格させて実行する

    • 回答としてマーク Luky9 2019年6月12日 10:05
    2019年6月12日 9:23
  • Lucy9 さま よろしく。

    https://support.microsoft.com/ja-jp/help/318744/how-to-use-visual-basic-to-programmatically-change-ownership-of-a-file
    に参考コードは載っていますが(改行無し?)、
    基本的に、エラー処理で分岐して、処理すべきと思います。

    扱わない様にするのも、手だと思います。

    つまり、魔界の仮面弁士 さまの意見に賛成です。
    昇格で事足りるなら、その方がベターですしね。

    闇雲に、プログラムを動かすと既定の設定が変わってしまうのは、如何なものかと?。
    その場合、最低でも、後で元に戻す位の配慮は必要でしょう。
    OS 側の配慮を壊すのはセキュリティ的にも危うい事に繋がる気がします。
    何か、本末転倒している気がしてなりません。

    • 回答としてマーク Luky9 2019年6月12日 10:05
    2019年6月12日 9:56

すべての返信

  • ここでいうアクセス権限とは、どのような操作のことを指していますか?

    取得したい目的にもよりますが、「データの読み取り権限はあるが、アクセス許可の読み取り権限が無い」というパターンもありえますので、実際に読み書きの操作をしてみて、実行時例外を捉えるのが手っ取り早いかと思います。

    2019年6月12日 7:02
  • ここでいうアクセス権限とは、どのような操作のことを指していますか?

    取得したい目的にもよりますが、「データの読み取り権限はあるが、アクセス許可の読み取り権限が無い」というパターンもありえますので、実際に読み書きの操作をしてみて、実行時例外を捉えるのが手っ取り早いかと思います。

    実はあるフォルダ(ファイル)を読み込み時に例外発生しています。例外内容は「パス 'C:\Windows\Prefetch' へのアクセスが拒否されました。」です。
    私は対象フォルダ(ファイル)を読み込み前にアクセス権限あるかどうか確認してない場合は追加して読み込むするようにしていです。


    • 編集済み Luky9 2019年6月12日 7:32
    2019年6月12日 7:15
  • 既存ファイルやフォルダーの権限をアプリケーション側で編集するのは、聊か乱暴すぎるように思えます。本当にアクセス権を変更する必要があるのでしょうか。
    何のためにそのフォルダーにアクセスしたいのかは分かりませんが、アプローチが間違っている印象を受けました。

    C:\Windows\Prefetch の NTFS アクセス権は、既定で下記の状態になっているはずです。

    • BUILTIN\Administrators:F
    • BUILTIN\Administrators:(OI)(CI)(IO)F

    なのでたとえば:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        ListBox1.DataSource = My.Computer.FileSystem.GetFiles("C:\Windows\Prefetch").ToArray()
    End Sub

    のようなコードを実行した場合、下記の動作になるはずです。

    • 管理者として実行 → 正しく列挙される
    • そのまま起動 → 権限不足により UnauthorizedAccessException の例外になる


    アプリケーションが常に管理者として実行されるようにしたいなら、アプリケーション マニフェストにて、requestedExecutionLevel 要素の level を "requireAdministrator" に設定しておくことができます。

    あるいは、普段は一般ユーザー権限で利用させておき、特定の機能だけを管理者権限で実行させたい場合には、"runas" 動詞にてプロセスを実行させる方法が使えます。

    常に管理者としてアプリケーションを実行させるには?

    管理者としてほかのアプリケーションを実行するには?

    必要な処理だけ管理者に昇格させて実行する

    • 回答としてマーク Luky9 2019年6月12日 10:05
    2019年6月12日 9:23
  • Lucy9 さま よろしく。

    https://support.microsoft.com/ja-jp/help/318744/how-to-use-visual-basic-to-programmatically-change-ownership-of-a-file
    に参考コードは載っていますが(改行無し?)、
    基本的に、エラー処理で分岐して、処理すべきと思います。

    扱わない様にするのも、手だと思います。

    つまり、魔界の仮面弁士 さまの意見に賛成です。
    昇格で事足りるなら、その方がベターですしね。

    闇雲に、プログラムを動かすと既定の設定が変わってしまうのは、如何なものかと?。
    その場合、最低でも、後で元に戻す位の配慮は必要でしょう。
    OS 側の配慮を壊すのはセキュリティ的にも危うい事に繋がる気がします。
    何か、本末転倒している気がしてなりません。

    • 回答としてマーク Luky9 2019年6月12日 10:05
    2019年6月12日 9:56