ルータを置けば「管理者パスワード」を設定する。ネットプリントに申し込めば「法人アカウント」を登録する。スキャナを買っただけでも「ユーザ登録」が必要となる。幼い日から「絶対にパスワードは他人に教えてはなりません」と教わって大人になったのに、、、現実の大人の世界には「組織内で共有(共用)せざるをえないパスワード」が沢山あるじゃないか!! (そして会社のファイルサーバには、門外不出の秘密ファイルが。。。)
以下のワークフローは「共有パスワード」を管理する業務プロセスだ。
組織用の「パスワードマネージャ」と言っても良い。社員からのリクエストがあった際、その10分後にパスワードが自動開示される仕組みだ。誰が・いつ・どのパスワードを利用したか、すべて自動的に記録されるようになる。(加えて管理者側の「パスワード変更」も記録されるようになる)
[共有パスワード問合]
この業務プロセスを稼働させれば、申請権限のある社員であれば、いつでもパスワードを取得できるようになる。言ってみれば「非常にユルイ管理」だ。(加えてパスワードそのものも平文で保存されている)
- 無線WiFiの「セキュリティキー」
- Web サイトの「Basic 認証」
- クラウド会計の「一時的な閲覧権限」
ちなみに、暗号化しすぎることで、ユーザ自身が復号できなくなるリスクがあるなら、「平文での管理」も強ち非難される手法ではない。またこの例では、平文で管理する一方、「閲覧制限がかかっている Google Spreadsheet」(外部システム)に保存している点が秀逸だ。特に Google Apps Vault で、ファイルの閲覧履歴が全て管理されているなら非常に有効な手段といえる。
(もちろん、パスワードを「Aパート」と「Bパート」に分割して保存する、暗号化して保存する、など、更なる高度化も考えられる)
[共有パスワード問合:「1.PWリクエスト」画面]
▼PW保存用 Google Spreadsheet の準備
※ API経由でのみアクセスされる
- 1. Google Spreadsheet 新規作成
- 2. 共有設定にて閲覧権限者が居ない事を確認
- 3. ファイルID(Spreadsheet ID)をメモ
- 4a. シート名を『対象システム』の[選択肢ラベル]に
- 4b. シートidを『対象システム』の[選択肢ID]に
- 5. (選択肢の数に応じてシートを追加)
▼OAuth2.0 通信許可設定サンプル
== 1. Googlea Developers Console 側を設定する ==
- アプリケーションの種類: ウェブアプリケーション
- 認証情報: qapp
- 承認済みのリダイレクト URI: https://s.questetra.net/oauth2callback
- Name: sheets-api-v4
- Authorization Endpoint URL: https://accounts.google.com/o/oauth2/auth?access_type=offline&approval_prompt=force
- Token Endpoint URL: https://accounts.google.com/o/oauth2/token
- Scope: https://www.googleapis.com/auth/spreadsheets
- Consumer Key:(Google Developers Console で取得)
- Consumer Secret:(Google Developers Console で取得)
▼スクリプト工程『Get URL』の設定サンプル (サーバサイド JavaScript)
//// == ワークフローデータの参照 / Retrieving == var mySystems = data.get("q_systems"); var spreadSheetId = data.get("q_spreadsheetid") + ""; var sheetId = mySystems.get(0).getValue() + ""; var sheetName = mySystems.get(0).getDisplay() + ""; //// == 演算 / Calculating == var myUrl = ""; myUrl = 'https://sheets.googleapis.com/v4/spreadsheets/'; myUrl += spreadSheetId; myUrl += 'values/'; myUrl += sheetName; myUrl += '!C1:D1'; //// == ワークフローデータへの代入 / Updating == retVal.put("11", myUrl );
▼Get PW via Google Sheets API v4
- Method: GET
- Access URL: #{data['●']}
- Response: On
- Connection: OAuth 2.0
== Response JSON sample ==
{ "range": "wifi1!C1:D1", "majorDimension": "ROWS", "values": [ [ "example1@example.com", "qwerty" ] ] }
▼スクリプト工程『レスポンス処理』の設定サンプル (サーバサイド JavaScript)
//// == ワークフローデータの参照 / Retrieving == var myJson = data.get("13") + ""; // JSON text //// == 演算 / Calculating == var newIdPw = JSON.parse( myJson ); //// == ワークフローデータへの代入 / Updating == retVal.put("q_newid", newIdPw.values[0][0] ); retVal.put("q_newpw", newIdPw.values[0][1] );
▼スクリプト工程『リクエスト生成』の設定サンプル (サーバサイド JavaScript)
//// == ワークフローデータの参照 / Retrieving == var newId = data.get("q_newid") + ""; var newPw = data.get("q_newpw") + ""; var mySystems = data.get("q_systems"); //var spreadSheetId = data.get("q_spreadsheetid") + ""; var sheetId = mySystems.get(0).getValue() - 0; //var sheetName = mySystems.get(0).getDisplay() + ""; //// == 演算 / Calculating == var dateTimeSerialNumber = Date.now() / 1000 / 60 / 60 / 24 + 70 * 365 + 19; // UNIX time to Excel-Lotus Serial Number // from December 31st 1899 (1900年うるう日問題) // Date.now() は、UTC の時刻を取得 var myObj = {}; myObj.requests = []; // Array myObj.requests[0] = {}; myObj.requests[0].appendCells = {}; myObj.requests[0].appendCells.rows = []; // Array myObj.requests[0].appendCells.sheetId = sheetId; myObj.requests[0].appendCells.fields = "*"; myObj.requests[0].appendCells.rows[0] = {}; myObj.requests[0].appendCells.rows[0].values = []; // Array myObj.requests[0].appendCells.rows[0].values[0] = {"userEnteredValue": {"numberValue" : dateTimeSerialNumber } }; myObj.requests[0].appendCells.rows[0].values[1] = {"userEnteredFormat": {"numberFormat": { "type": "DATE_TIME" } }, "userEnteredValue": {"numberValue": dateTimeSerialNumber }}; myObj.requests[0].appendCells.rows[0].values[2] = {"userEnteredValue": {"stringValue": newId }}; myObj.requests[0].appendCells.rows[0].values[3] = {"userEnteredValue": {"stringValue": newPw }}; myObj.requests[1] = {}; myObj.requests[1].sortRange = {}; myObj.requests[1].sortRange.range = { "sheetId": sheetId,"startRowIndex": 0,"endRowIndex": 3 }; myObj.requests[1].sortRange.sortSpecs = [{"dimensionIndex": 0,"sortOrder": "DESCENDING"}]; var myJsonText = JSON.stringify( myObj ); //// == ワークフローデータへの代入 / Updating == retVal.put("12", myJsonText );
▼Post PW via Google Sheets API v4
- Method: POST (with Request Body)
- Access URL: https://sheets.googleapis.com/v4/spreadsheets/#{data['●']}:batchUpdate
- Connection: OAuth 2.0
- Request Body: application/json
== Request JSON sample ==
{"requests": [ {"appendCells": { "sheetId": 0, "rows": [ {"values": [ {"userEnteredValue": {"numberValue": 43210.12345}}, {"userEnteredFormat": {"numberFormat": { "type": "DATE_TIME" } }, "userEnteredValue": {"numberValue": 43210.12345}}, {"userEnteredValue": {"stringValue": "example@example.com"}}, {"userEnteredValue": {"stringValue": "qwerty"}} ]} ], "fields": "*" } }, {"sortRange": { "range": { "sheetId": 0, "startRowIndex": 0, "endRowIndex": 3 }, "sortSpecs": [ { "dimensionIndex": 0, "sortOrder": "DESCENDING" } ] } } ]}
<データ項目一覧画面>
[雛形ダウンロード (無料)]
- 業務テンプレート:共有パスワード問合
- 第490話:パスワードを自動生成するボタンを配置する (2016-07-04)
- 第491話:銀行 CSV を Google Sheets に流し込む (2016-07-11)
- 第492話:取引先マスタ Spreadsheet を 参照する(Sheets API v4) (2016-07-19)
- M230 自動工程: 業務データの複雑なデータ加工が自動実行されるように設定する(ECMAスクリプト) (使い方)
- M225 自動イベント: 業務データを組み込んだHTTPリクエストが、自動的に送信されるように設定する (使い方)
- M202 業務の流れ: 処理フローを定義し、各工程の締切時刻を設定する (使い方)
[英文記事 (English Entry) ]
0 件のコメント :
コメントを投稿