sqlserver::user::permissions always applied as corrective
評価
調査の方向性
templates/query/user/permission_exists.sql.epp から始め、templates/create/user/permission.sql.epp および templates/query/role/permission_exists.sql.epp と比較します。permission 変数の設定を確認してから、記載されている Puppet の再現を 2 回実行します。完了条件は、2 回目の実行で sqlserver_tsql リソースが同期済みと報告され、GRANT 権限が再適用されないことです。
索引モデルが issue の本文から書いたものです。
説明
Describe the Bug
When declaring sqlserver::user::permissions with GRANT permissions, Puppet re-applies the permissions on every run as a corrective change, even though the permissions are already in the desired state.
Expected Behavior
On the second Puppet run (after permissions are already granted), the sqlserver_tsql resource should be in sync and no corrective change should occur.
Steps to Reproduce
- Declare
sqlserver::user::permissionswith e.g.permissions: ['SELECT', 'INSERT']andstate: GRANT - Run Puppet agent — permissions are applied
- Run Puppet agent again — permissions are re-applied as corrective
Root Cause
The onlyif query template templates/query/user/permission_exists.sql.epp iterates over permissions but never assigns the SQL variable @permission:
<% $permissions.each |$requested_permission| { %>
<% $permission = $requested_permission.upcase %>
<%= epp('sqlserver/snippets/user/permission/exists.sql.epp', ...) %>
<% } %>
The Puppet variable $permission is set, but the SQL variable @permission stays NULL. Since permission_name = NULL is never TRUE in SQL Server, the subquery always returns NULL, ISNULL coerces it to 'REVOKE', and the check always sees a mismatch — causing Puppet to re-grant every time.
The create template (templates/create/user/permission.sql.epp) and the role equivalent (templates/query/role/permission_exists.sql.epp) both correctly set @permission. This is the same class of bug as #464 / #500 which fixed the login permission template.
Fix
Add the missing SET @permission = '<%= $permission %>'; line in the query template, matching the create template.
- 主要言語
- Ruby
- スター
- 5
- フォーク
- 23
- 平均マージ
- 3時間 17分
- マージ済み PR(30日)
- 1
環境構築
このプロジェクトの開発コンテナを、あなたの GitHub アカウントでブラウザ上に起動します。
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
puppetlabs/puppetlabs-sqlserver のほかの issue
-
Paramter as_sysadmin_accounts does not behave in the same way as sql_sysadmin_accounts対応中かも @jst-cyr が 45 日前に担当しました。 オープンbugfix community
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
puppetlabs/puppetlabs-sqlserver#505 · コメント 1 件 · リアクション 2 件 ·
-
community
難易度 5/5 1週間以上 初心者へのやさしさ 25/100
puppetlabs/puppetlabs-sqlserver#465 · リアクション 1 件 ·
-
community
難易度 3/5 1〜2日 初心者へのやさしさ 45/100
-
bugfix community
難易度 4/5 3〜5日 初心者へのやさしさ 35/100
puppetlabs/puppetlabs-sqlserver#427 · コメント 4 件 · リアクション 2 件 ·
puppetlabs/puppetlabs-sqlserver の issue をすべて見る
似ている issue
-
[Bug] Chatwoot v4.19.0 – Super Admin returns 500 due to missing superadmin.scss Vite manifest entryオープンBug
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
メンテナーはふだん 2 日以内に返信
-
PRM baseline System 1 and 2 fans run continuously in unoccupied hours (low priority)対応中かも @anchapin が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
NatLabRockies/openstudio-standards#2167 ·
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1時間未満 初心者へのやさしさ 84/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
-
internal
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
Kong/developer.konghq.com#7716 ·
メンテナーはふだん 1 日以内に返信