Shintaro's Laboratory

SEの徒然日誌です。気ままに更新していきます。

SQLServerの監査ログ機能でフィルターを使ってみた

SQLServerで監査ログを取ろうと思ったが予想以上にログが出てしまったので、削減手法の1つであるフィルターという設定を試してみた。以下その知見をまとめる。

 

まず設定は監査->右クリック->プロパティ->フィルタで設定できる。



右の中の枠に実際の条件を記載していく。下記の中でWHERE句や述語と書いてあったので、WHEREから記載するのかと思ったが、条件だけを記述しないとエラーになるので注意してほしい。

 

サーバー監査およびサーバー監査の仕様を作成する - SQL Server | Microsoft Learn

 

括弧などは勝手に登録すると補完してくれる。

下記のように登録ができたら、OKを押下して監査を有効化すれば完了である。



確かに、object_nameがcodeとmasterしか監査ログに出力されなくなっていることが確認できる。

 

記述方法は一見するとSQL文と同様に見えるが、in句などは利用できないので注意してほしい。

 

特定のobject_nameを出力したくない場合は下記のように記述する。

 

windowsのバッチファイルの困ったを解決する(echoとforループ編)

windowsのバッチファイルで簡易ツールを作成する機会があったが、いくつかハマってしまった点があったので、知見として整理する。

 

1.echoコマンドの使い方

echoコマンドだが、後ろにコマンドを記載しても特に解釈されることはないようだ。

つまりechoの文字列の中にコマンドになりうる箇所があっても、わざわざダブルクォーテーションでくくる必要はない。

 

次にechoの中にダブルクォーテーションや、括弧「(」や「)」がある場合は、「^」を使用すると特殊文字として解釈されずそのまま文字として利用可能。echoを使用している箇所で「~の使い方が誤っています」というようなエラーが出る場合も、このあたりを疑うと良い。

 

またecho内において文字列を結合したい場合も、pythonなどのように「+」を使う必要はなく、そのまま繋げればよい。

 

2.forで順番にリストファイルを処理する際に、先頭1行だけスキップしたい。

オプションにskipというものがあるがあるので、こちらを利用するとよい。わざわざ前処理をするより、簡単にできる。

 

3.for文でカウントアップを利用したい。

遅延環境変数を利用するとよい。遅延環境変数にしないと、ループの中ではずっと1のままとなってしまうので注意。

 

GPTs使ってみた

最近はOpenAIのAPIにハマってしばらくブログの更新ができてなかったですが、11/6に行われたOpenAI DevDayにて発表されたGPTsを触ってみたのでどんなことができるのかを共有します。

 

GPTsは特定の目的にカスタマイズしたChatGPTを簡単に作成できるサービスで、現状ChatGPT Plusのユーザーとエンタープライズユーザーが使えるとのことです(GPTs作成後に他のユーザーに共有できる機能がありますが、他のユーザーもChatGPT Plusやエンタープライズのユーザーでないと、現状は使えないようです)

 

下記のような記載がOpenAIのサイトに書いてあったので、そのうち他のユーザーでも使えるようになるかもしれません。

Example GPTs are available today for ChatGPT Plus and Enterprise users to try out including Canva and Zapier AI Actions. We plan to offer GPTs to more users soon.

https://openai.com/blog/introducing-gpts

 

 

では使い方を簡単に解説します。

まずChatGPTを開き、上図のようにExploreを選択し、Create a GPTを選択します。

 

 

次に上記のようにGPTから目的や、名前、アイコン、ふるまい等の質問を受けるので、それに答えていくだけという流れです(慣れて来ると、configureというタブを直接編集する方が早いと思われる)。

 

 

一通り設定すると右側にあるプレビューで試すことができ、想定と違うふるまいをする場合は追加の指示を左側で入力すると設定が更新されます。

 

 

最後に共有方法を選択して、完成です。

上記の例では知識を直接入力しましたが、PDF等で与えることもできました。

 

 

気になるところは知識がモデルの学習に利用されてしまわないかという点ですが、設定で選択できるので大丈夫そうです。

 

実際に使ってみましたが、自分でAPIを利用してコーディングした方が細かい設定を入れやすいので精度が出るようです。なので「インターフェースを作らなくてよい点」「他のユーザーへの共有が容易になる点」「エンジニア以外でも簡単にアプリが作成できる点」がメリットだと感じました。

 

結局のところEmbeddingでは出せない細かい意味の違いを正確に捉えられる技術の登場が次のブレークスルーのポイントだと考えています。

 

apple watch series8を買ってみた

運動量や水分摂取量などヘルスケアについての情報が取りたかったこと、そしてダルビッシュ選手がラプソードという測定器を使ってブルペンでの1球1球の回転数・軸などの情報を基に改善を図っていたのを見て集中力・無駄な時間の削減等にデータを利用できないかと考え、apple watchを購入してみた。

 

今回は1日利用してみて分かったことをまとめてみる。

 

購入時点の落とし穴としては、充電器のコンセント側がただのUSBではなくtype c(オス)となっていたことだ。したがって、充電するにはマストで別売り(2000円くらい)のtypeCとコンセント変換機が必要なので注意してほしい(店員さん普通のUSBで大丈夫と言っていたのに。。)。

 

購入時の設定はかなり簡単であった。自身の所有しているiphoneとペアリングし、基本的にiphone側のwatchというアプリで機能制限やヘルスケア情報の設定を選んでいくだけであった(設定後にapple watchに反映する時は15分ほど時間がかかったので注意)。

 

手に何かがついている感覚が嫌いで時計は避けていたが、apple watchのスポーツバンドはあまり気にならなかった。またバンドの穴を1つ分緩く設定しても時計部分が大きいのでくるくる回転してしまうこともないため、おすすめである。

 

通知の状況についても、特に気にならなかった。ヘルスケアの情報を取得する用途で使用したいので無駄な通知は極力減らしたかったが、上述するwatch上で通知を消しておけば問題なかった。

 

充電についてだが、お風呂に入っている1時間ほどで20%→80%くらいまでは回復していた。また一日の消費量だが使い方には依存するとは思うが20%程度だったので、入浴中に充電しておくのでよさそうである。

 

1日使用した時点でよかったことを整理すると下記である。

・エクササイズの合計時間、立ち上がった回数、消費カロリー、心拍数、自宅にいる間も含めたトータル歩数、酸素レベル、より正確な睡眠時間等が測定できるため、生活改善にかなり役立ちそう

・誘惑が多いiphoneを開かなくても2タップくらいで水分補給量を記録できる。そして数値化すると意外と水分をとれていないことが発見できる。

スタンドアップと、水分補給の通知はかなり役立つ。

・デフォルト表示の文字盤が多数種類があり、アクティビティ(エクササイズ、スタンドアップ等)の情報を一目でわかるデザインが便利

 

上記が1日経過時点で分かったことだが、今後apple watchで得られたヘルスケア情報をもとに集中力やだらだらした時間の削減等の改善ができるか検討を続け、成果を報告しようと思う。

ChatGPTにコーディングを学ぶ

堀江さんのメルマガで下記ニュースが紹介されていた。ChatGPTにgoogleのコーディング試験を受講させると、採用されるレベルにあるとのこと。

 

https://gigazine.net/news/20230206-chatgpt-passed-google-coding-interview/

 

ChatGPTをコーディングの教師として利用できるのではないかと仮説を持った。今回は簡易検証に伴いChatGPTを触ってみたので、その結果分かったことを紹介する。

 

ChatGPTとは、インターネット上の大量のデータによって文字推定のトレーニングを積んだ対話型のAIのことを言う。ChatGPT自身に紹介させると下記のようになる。

 

「OpenAIによってトレーニングされた自然言語処理技術を使用して、ユーザーと対話をします。私は、自然言語の生成、文章の分類、言語翻訳、自然言語理解などのタスクに利用されます。

 

私は、様々なトピックについて質問や会話をすることができます。私は、言語モデルとして設計されており、大量のテキストデータをトレーニングして、人間のように自然な応答を生成するようになっています。私は、誰でも利用することができ、24時間365日、いつでもどこでも利用可能です。」

 

アカウント登録方法は検索で多くヒットするので、そちらを参照してほしい。まず手始めに流行りのスポットを聞いてみた結果が下記となった。最近というようなデータが少ないものの回答には適していないようである。

 

 

次にpythonのメソッドの利用方法について聞いてみた。かなり正確に回答が得られるようである。つまり確かな回答があり、データも蓄積されている問いには十分利用可能と思われる

 

 

次に実際にソースコードを書かせてみた結果が下記である。下記だと先頭と末尾のみを判定してしまっている。

 

 

指摘を出して修正してもらった結果が下記である。今度は正しく、かつリスト内包表記を利用した美しいプログラムが作成された。

 

 

上記以外にもいくつかプログラムを生成させた結果、AIが一意に推定可能な指示を出すことができればコーディングの教師になり得ることがわかった。自身がプログラムを書き終わった後にChatGPTにもプログラムを生成させ、より美しいプログラムを検討することで、自身のエンジニアとしてのスキルが向上することができるのではないか。今後自身で検証を重ね、結果を報告したい。

SQLServerの基礎(ユーザーと認証)

今回はSQLServerの基礎であるユーザーと認証について整理する。

 

通常SQLServerと呼ばれるものは、OS上で動作するインスタンスのことを指す。

インスタンスは下記2つに大別できる。

規定のインスタンス・・・デフォルトのインスタンスMSSQLSERVERという名前となる。ログインする際にインスタンス名を省略できる。1つのインスタンスしか必要ない場合はこちらでよい。

名前付きインスタンス・・・1台のOSに複数面のSQLServerを構築したい場合等に利用する。

 

なお複数インスタンスを作成した場合は、ポート番号で接続を分けるという手法がよく使われる。ポート番号はSQLServerConfigurationManagerで確認可能となっている(規定のインスタンスのデフォルトポートは1433である)。

 

話を戻す。先ほどのインスタンスに対して、下記2つの認証方法を設定できる。

windows認証・・・OSの認証と同じ。

SQLServer認証・・・SQLServerに作成したログインユーザー(sa等)で認証する。

 

そしてインスタンスの中に複数のデータベース(テーブルの集合体)を構築できる。例えば従業員テーブル、役職テーブルをまとめて人事データベースとするように。

 

このデータベースには、データベースユーザーを作成できる。データベースユーザーは、配下のそれぞれのテーブルに対して、db_owner(最高権限)のような操作の権限(ロール)を付与することができる。ここで権限を設定したデータベースユーザーとログインユーザーをマッピングさせることで、特定のログインユーザーでログインした際に個々のテーブルに対して何ができるかというのを規定することができる。

 

例:test_loginというログインユーザーに対してtestデータベースのtestというデータベースユーザーができる操作をマッピングする。

ヘッドレスブラウザ単体ではプロキシのbasic認証自動化はできなかったという話

仕事でバタバタしていたこともあってしばらくブログをおさぼりしてました。。

 

ただ満足できるネタが見つかるまで出さないといつまでもブログが更新できそうにないので、今後は小ネタでも更新していくようにします。

 

ということで今回は、タイトルの通りヘッドレスブラウザについて書いていきます。

 

ヘッドレスブラウザとはChromeFirefox等のブラウザのドライバ(WebDriver)をバックグラウンドで呼び出し、プログラムからブラウザを操作する仕組みのことを言います。

 

pythonのRequestsなどスクレイピングをする他の技術と何が違うのかと思われた方もいらっしゃるかと思いますが、WebDriverを使うメリットはjavascipt起動後の動的なサイトの情報を簡単に取得可能であるという点です。動的サイトを利用した業務の自動化に役立つ技術となります。

 

WebDriverは実行ファイルをダウンロードし、任意のフォルダに配置するのみで使用することが可能です(WebDriverそのものの使い方は検索すればたくさん出てくるので、今回は省きます)。

※ブラウザそのものは存在する必要あり

 

本題のプロキシ環境下でWebDriverを利用する方法を解説します。プロキシ環境はubuntu(virtualbox上)にsquidを入れて構築しました。

 

pythonを例とすると、common.proxyライブラリを利用する場合は、下記のように記載します。

 

※proxyTypeがMANUALとは、自身でどのプロキシを選択するか指定するという意味となります。他にもSYSTEM(OSで設定されているプロキシ)やPAC(pacファイルに指定されたプロキシ)などがあります。

 

ここで重要なのは、requests等のようにプロキシにuser:pass@ip:portと記載しても自動認証されない(ポップアップが出てくる)という点になります。

 

 

各ブラウザごとのoptionsライブラリを利用する場合は下記のように記載します。多少文法が違うだけで、どのライブラリを使用しても同じような記載の仕方になります(つまりuser:pass@ip:portとは記載できない)。

 

 

chromeのoptionsを利用する場合は下記のようになります。

 

 

chrome.optionsを利用する際、昔の名残で--proxy-authを利用すれば可能という記述のあるサイトがいくつか見つかりますが現在はそのオプションは存在しない(空振りする)ので注意してください。

 

なお現状のオプションは下記に一覧があります。

https://peter.sh/experiments/chromium-command-line-switches/

 

現状は自身でプロキシ環境をもう1つ作成し自端末→自プロキシ→社内プロキシ等という順でアクセスするか、selenium-wire(MITMproxyを使っていそうなのでプロキシの2重化と根本的に同じと思われる)しかなさそうです。。