我有以下木偶代码:
mysql_grant {'my-user-name@1.2.3.4/my-database-name.*':
ensure => 'present',
options => ['GRANT'],
privileges => ['SELECT', 'INSERT', 'DELETE', 'UPDATE'],
table => 'my-database-name.*',
user => 'my-user-name@1.2.3.4',
}
并确实授予了我期望的权限。
如果我改变主意并说出来:
mysql_grant {'my-user-name@1.2.3.4/my-database-name.*':
ensure => 'absent',
options => ['GRANT'],
privileges => ['SELECT', 'INSERT', 'DELETE', 'UPDATE'],
table => 'my-database-name.*',
user => 'my-user-name@1.2.3.4',
}
我注意到它没有撤销权限(即使我更改了s / GRANT / REVOKE /)也没有。有关如何自动撤销的任何指示?我还没有在手册中或通过谷歌搜索找到它。
现在假设我想允许来自多个主机的访问。我的puppet-fu让我不知道如何不重复该块(即,只是使用不同的IP地址进行复制粘贴)。我确定puppet为此定义了工具,但我还没有想出那个部分。
感谢您的任何指示!
答案 0 :(得分:0)
对于重复部分,我可以想到两种方式:
每当您希望节点的事实在第二个节点上执行某些操作时,请使用puppetDB。这称为导出资源。这也在puppet-mysql documentation中解释。
示例1:将所有计算机的SSH主机密钥添加到所有其他计算机的known_keys。
示例2:将所有计算机添加到监视中,创建自己的主机定义。
示例3:在某类机器上,允许它们连接到MySQL。
在每种情况下,您首先通过puppet-puppetdb模块安装puppetDB。你需要puppet4。只有拥有8 GB以上的内存才会启动PuppetDB。
然后您必须编写资源导出和资源导入。在所有具有您想要的事实的节点上(如ip / fqdn),您可以编写导出:
@@mysql_grant {"my-user-name@${::ipaddress}/**my-database-name.*":
ensure => 'absent',
options => ['GRANT'],
privileges => ['SELECT', 'INSERT', 'DELETE', 'UPDATE'],
table => 'my-database-name.*',
user => "my-user-name@${::ipaddress}",
}
' @@'创建导出。请注意,导出的资源是小写。每当使用变量时,还要注意双引号而不是单引号。
每当节点看到这种情况时会发生什么,它会用它的事实填充这个导出的资源(在这种情况下是:: ipaddress),并将它发送到puppetDB。您可以将此部分添加到要授予访问权限的所有节点,部分地使其失效,或者您可以将一个清单应用于所有节点并执行以下操作:
if $::fqdn include? 'app'{
@@mysql_grant {"my-user-name@${::ipaddress}/**my-database-name.*":
ensure => 'absent',
options => ['GRANT'],
privileges => ['SELECT', 'INSERT', 'DELETE', 'UPDATE'],
table => 'my-database-name.*',
user => "my-user-name@${::ipaddress}",
}
}
然后,您需要在应该应用此语句的节点上编写 import 语句。
Mysql_grant <<| |>>
请注意大写。
另一个快速示例,我们将其应用于所有Linux节点:
# collect all the public host RSA keys for known hosts
@@sshkey { $hostname:
ensure => present,
type => 'rsa',
host_aliases => [$::ipaddress, $::fqdn],
key => $sshrsakey,
}
# and populate known_hosts
Sshkey <<| |>>
#https://projects.puppetlabs.com/issues/21811
file { '/etc/ssh/ssh_known_hosts':
ensure => present,
path => '/etc/ssh/ssh_known_hosts',
mode => '0644',
}
Hiera正是为了这个目的而构建的,用于从数据中分离代码。请参阅hiera文档以了解如何设置它。
您最终要做的是创建一个包含所有数据的yaml文件:
mysql::grants:
db1:
username: my-user-name
database: my-database-name
ip: 1.2.3.4
ensure: present
options:
- GRANT
privileges:
- SELECT
- INSERT
- DELETE
- UPDATE
table: my-database-name.*
db2:
username: my-user-name
database: my-database-name
ip: 1.2.3.5
ensure: present
options:
- GRANT
privileges:
- SELECT
- INSERT
- DELETE
- UPDATE
table: my-database-name.*
然后你继续把它放在你的mysql节点中(虽然创建一个小模块会更干净):
$grants = hiera('mysql::grants', undef)
create_resources('mysql::grant', $grants)
Puppet将解析所有hiera,然后为每个找到的数据库创建一个授权。
答案 1 :(得分:-1)
尝试在新用户上使用mysql_grant
,然后在清单上使用puppet apply和-d(调试)和-v(详细)选项。
这应该会给你一大堆输出,显示它正在做什么。它将要做的是在您的数据库上运行sql命令,例如
grant all on db.* to user
运行
时也会显示这些内容 show grants for user
然后更改为“缺席”,然后重复。 现在您确切地知道您的数据库上正在运行的SQL命令puppet。
然后,您可以直接在数据库中尝试这些命令,看看它们是否符合您的预期。
注意:使用ensure =&gt; &#39;缺席&#39;删除权限是正确的做法,将grant更改为revoke won to help。