以非root用户身份连接到带有C#的MySQL数据库?

前端之家收集整理的这篇文章主要介绍了以非root用户身份连接到带有C#的MySQL数据库?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
首先我要说的是我对数据库完全陌生,但一直在阅读他们的 MySQL教程.

现在,我正在尝试创建一个允许非特权用户(非root用户)通过C#GUI应用程序连接并在数据库上执行某些命令的应用程序.用户将使用Windows身份验证登录数据库.

现在,我能够创建一个快速GUI,运行程序的人可以使用“root”连接到本地主机上的数据库,并获取其中的任何内容.

我的问题是,我如何允许用户使用非root权限进行连接?我能够找到的唯一的东西都是使用连接字符串w /“root”作为用户.

编辑:数据库已经制作完成.我个人无法以root用户身份连接到该用户并授予其他用户权限.

解决方法

一些重要的概念也是这里显示的表中的行:
select user,host,password from MysqL.user where user='pfinferno';

重要的是,用户可以拥有多个主机名或通配符.每个人都有自己的权利和密码.虽然上面的密码是经过哈希处理的,但至少可以快速观察它,以便查看所有密码是否匹配(例如root与3个帐户).

主机列由以下值填充,主要是:

标本A:

> localhost
> 127.0.0.1
>%
> md21.newyork.comcastbusiness.net等常用名称

%值是通配符.这是为了灵活性,但与’root’@’%’等用户一起使用时可能会非常危险.强烈建议仅在标本A中保持根为第一个.此外,前两个在不同的工具中是完全不同的.我建议的是前两个用户行,并保持密码相同.这种方法有利有弊.但请记住,当你无法连接其他东西时,依赖于连接,无论是代理,PHPmyadmin,工具,my.conf设置等等.你将重新审视这一点.

在Mureinik给出的示例中,它使用通配符host =%向用户授予权限.这意味着它依赖于这样创建的用户.请注意,通常以这种方式设置用户帐户.虽然没有什么可以限制你把它锁得更紧.

用户尝试连接到服务器时,他最终连接的用户可以解析为不同的用户/主机组合,如在没有localhost(主机)用户或公用名的情况下可以看到,但是而是一个主机值为通配符%的人.这可以通过以下查询看到:

标本B:

select current_user(),user();

后者是连接尝试所呈现的用户,前者是已解决且实际的用户.这些影响可能导致人们在调试中浪费时间,这可以在这些论坛中看到.有些人连续几天无法连接,我很认真.

标本C:

create user 'pfinferno'@'localhost' identified by 'thePassword';
create user 'pfinferno'@'127.0.0.1' identified by 'thePassword';
create user 'pfinferno' identified by 'thePassword';
create user 'pfinferno'@'md21.newyork.comcastbusiness.net' identified by 'thePassword';

– 注意上面的#3和’pfinferno’@’%’相同

现在被授予,主机名可以是普通用户通配符,主机名可以是localhost,只有root用户可以是127.0.0.1.但是,在试图锁定安全性时,管理员通常会根据进入的主机名创建用户帐户(例如Specimen C,第4行),并根据这种情况使用授权来改变安全性.管理它可能有点压倒性.所以他们经常只是说搞砸它,我会创建通配用户. Susie说,对于新用户来说这可能没什么问题,但是对于Secimen C第4行,如果你是谁,那么你就可以在第3行用户那里获得你不会接受的资助.因此,解决用户的实际行为(参见标本B),从最具体的主机名到回退到更一般,直到找到一个如通配符.

不幸的是,用户不会使用本身指定的主机名连接,它们就是它们的本质.他们试图连接.所以你不要说嘿我想成为这个东西@hostname,你就是你的本意.你是’pfinferno’@’md21.newyork.comcastbusiness.net’,但可能会回退到通配符.

如果除了通配符%之外,用户被放入Specimen C中,那么您最好获得与期望一起使用的授权,因为您现在是新用户.

尝试在grant语句中限制使用通配符,而不是像惰性方法那样执行*.*,这只会授予所有数据库和表的权限.在Mureinik的例子中,它适用于一个数据库中的所有表.不是太寒酸.尝试微调权限,例如向表授予SELECT权限或根本不授予对不需要它们的用户.小心使用WITH GRANT OPTION,如网上所示,切割并粘贴.如果您使用它,您只是授予用户权限以授予其他用户权限.

SSH隧道

您可能不想使用Secimen的一个原因主机=%通配符(除了显而易见的我们是风险规避者)是

create user 'pfinferno'@'localhost' identified by 'thePassword';

非常适合SSH隧道.您将通过加密安全通道与PKI连接,并将您自己呈现为@ localhost.这大大降低了安全性.

为什么我不能连接?

希望下面的视觉与小评论可以说明为什么我像我一样命名这个部分.

drop user 'pfinferno'@'localhost';
drop user 'pfinferno'@'127.0.0.1';
drop user 'pfinferno'@'%';
drop user 'pfinferno'@'md21.newyork.comcastbusiness.net';
flush privileges; -- some say this is not necessary,I have found otherwise

create user 'pfinferno'@'localhost' identified by 'thePassword';
create user 'pfinferno'@'127.0.0.1' identified by 'thePassword';
create user 'pfinferno' identified by 'thePassword';
create user 'pfinferno'@'md21.newyork.comcastbusiness.net' identified by 'thePassword';

select user,password from MysqL.user where user='pfinferno';

grant all on so_gibberish.* to 'pfinferno'@'%'; -- grant all rights on so_gibberish db

flush privileges; -- some say this is not necessary,I have found otherwise

看一些补助金.

show grants for 'pfinferno'@'localhost';    -- sandBoxed. Can just log in and sit there
+-----------------------------------------------------------------------------------------+
| Grants for pfinferno@localhost                                                          |
+-----------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'pfinferno'@'localhost' IDENTIFIED BY PASSWORD '*74692AE70C53...' |
+-----------------------------------------------------------------------------------------+

show grants for 'pfinferno'@'127.0.0.1';    -- sandBoxed. Can just log in and sit there
same as above

show grants for 'pfinferno'; -- wildcard % user,has all rights on so_gibberish;
+-----------------------------------------------------------------------------------------+
| Grants for pfinferno@%                                                                  |
+-----------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'pfinferno'@'%' IDENTIFIED BY PASSWORD '*74692AE70C53...'         |
| GRANT ALL PRIVILEGES ON `so_gibberish`.* TO 'pfinferno'@'%'                             |
+-----------------------------------------------------------------------------------------+

请注意,GRANT USAGE至少表示您有权登录和坐(沙盒).但是,通配符%user还拥有so_gibberish db的所有权限.

现在我通过MysqL -u pfinferno -pthePassword转到MysqL提示

MysqL> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
+--------------------+

MysqL> select current_user(),user();
+---------------------+---------------------+
| current_user()      | user()              |
+---------------------+---------------------+
| pfinferno@localhost | pfinferno@localhost |
+---------------------+---------------------+

尝试的用户(user())被解析为相同的(current_user()).我是沙箱,基本上什么都不做,除了现在选择()直到无聊到死.

MysqL> use so_gibberish;
ERROR 1044 (42000): Access denied for user 'pfinferno'@'localhost' to database 'so_gibberish'

退出MysqL CLI作为该用户.

现在

drop user 'pfinferno'@'localhost';
drop user 'pfinferno'@'127.0.0.1';
drop user 'pfinferno'@'md21.newyork.comcastbusiness.net';

我只丢掉了四个pfinferno用户中的三个

通过MysqL -u pfinferno -pthePassword转到MysqL提示

MysqL> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| so_gibberish       |
+--------------------+

MysqL> select current_user(),user();
+----------------+---------------------+
| current_user() | user()              |
+----------------+---------------------+
| pfinferno@%    | pfinferno@localhost |
+----------------+---------------------+

MysqL> use so_gibberish;
Database changed

这表明来自任何主机的CLI(或任何程序),连接尝试首先由用户呈现,然后解析为实际(分别参见user()和current_user()的输出).

所以,也许奇怪的是,当我放弃用户时,有效权利随着用户解决为另一个而增加.这可能是几小时/几天/几周调试的主题.用户可以不知道他们真正登录的是谁(已解决),或者为什么他们不能,因为顺便说一句,他们可以拥有不同的密码!对于MysqL.user中有几行的用户root来说尤其如此……并且考虑到最初可能有50%的MysqL用户与它连接,最初是作为开发人员.只是一个猜测.

猜你在找的Linux相关文章