首页 \ 问答 \ 将mysql设置为shell(Setting mysql as shell)

将mysql设置为shell(Setting mysql as shell)

我的机器上有一个用户只能运行mysql。 有没有办法可以将该用户的shell设置为mysql并使用密码和用户名登录?

我知道如何将shell更改为mysql二进制文件

usermod -s /usr/bin/mysql

这确实有效,只是我无法在程序中提供用户名/密码。 通常用户/ pw给出为

mysql -u $USER -p

我无法为shell提供参数

usermod -s "/usr/bin/mysql -u $USER -p" # Does not work!

使用简单的shell脚本作为shell也不起作用:

#!/bin/sh # mysqlShell
/usr/bin/mysql -u $USER -p
----
usermod -s mysqlShell # does not work

那么如何为我用作用户shell的程序提供参数呢?


感谢Tom Regner,我可以找到一个包含.my.cnf的解决方案

[client]
host=localhost
user=$user
password=$pass
disable-auto-rehash

其中mysql设置为shell。 我仍然想手动提供密码,但这是我发现的最好的。


I have a user on my machine that is only supposed to run mysql. Is there any way that I can set the shell of that user to mysql and login using password and username?

I know how to change the shell to the mysql binary

usermod -s /usr/bin/mysql

That is working indeed, only I can't provide a username/password in the program. Usually user/pw are given as

mysql -u $USER -p

I can not provide parameters for a shell as in

usermod -s "/usr/bin/mysql -u $USER -p" # Does not work!

Also using a simple shell-script as shell does not work:

#!/bin/sh # mysqlShell
/usr/bin/mysql -u $USER -p
----
usermod -s mysqlShell # does not work

So how can I provide parameters to a program I use as a shell for a user?


Thanks to Tom Regner I could figure out a solution using .my.cnf containing

[client]
host=localhost
user=$user
password=$pass
disable-auto-rehash

where mysql is set to the shell. I still would like give the password manually but this is the best I found.


原文:https://stackoverflow.com/questions/16730990
更新时间:2022-04-12 07:04

最满意答案

另一种方法是编写一个按RefProject分组的子查询,完成总和然后加入你的表。

SELECT x.RefProject, x.ProjectName, x.DateCreated, x.PlannedDueDate, T.Cnt
FROM Projects AS x
LEFT JOIN (   SELECT RefProject, COUNT(RefUser) AS Cnt
              FROM ProjectUser
              GROUP BY RefProject) AS T
    ON T.RefProject = x.RefProject
LEFT JOIN ProjectUsers AS a
    ON x.RefProject = a.RefProject
WHERE a.RefUser = 1;

使用标量函数或多语句表值函数将会降低性能,这个和你的查询都很好,只需很好地索引表,这样就可以了。

或者,如果分组成为问题,您可以创建索引视图并与其连接。 这会增加一些写入开销,但会对读取性能产生奇迹。

CREATE VIEW RefProjectCountView
WITH SCHEMABINDING
AS
SELECT RefProject, COUNT_BIG(RefUser) AS Cnt
FROM ProjectUser
GROUP BY RefProject;
GO

CREATE UNIQUE CLUSTERED INDEX PK_RefProjectCountView
ON RefProjectCountView (RefProject);
GO

SELECT x.RefProject, x.ProjectName, x.DateCreated, x.PlannedDueDate, T.Cnt
FROM Projects AS x
LEFT JOIN RefProjectCountView AS T WITH(NOEXPAND)
    ON T.RefProject = x.RefProject
LEFT JOIN ProjectUsers AS a
    ON x.RefProject = a.RefProject
WHERE a.RefUser = 1;

SQL Server需要WITH(NOEXPAND)提示来查询视图索引,而不是展开完整的select语句。


Alternative would be to write a sub-query that groups by RefProject, does the sum and then joins your table.

SELECT x.RefProject, x.ProjectName, x.DateCreated, x.PlannedDueDate, T.Cnt
FROM Projects AS x
LEFT JOIN (   SELECT RefProject, COUNT(RefUser) AS Cnt
              FROM ProjectUser
              GROUP BY RefProject) AS T
    ON T.RefProject = x.RefProject
LEFT JOIN ProjectUsers AS a
    ON x.RefProject = a.RefProject
WHERE a.RefUser = 1;

Using a scalar function or multi-statement table valued function will draw performance down, both this and your query are fine, just index tables well and this is going to work alright.

Alternatively, if grouping becomes a problem, you can create an indexed view and join with it. This adds some write overhead, but does miracles on read performance.

CREATE VIEW RefProjectCountView
WITH SCHEMABINDING
AS
SELECT RefProject, COUNT_BIG(RefUser) AS Cnt
FROM ProjectUser
GROUP BY RefProject;
GO

CREATE UNIQUE CLUSTERED INDEX PK_RefProjectCountView
ON RefProjectCountView (RefProject);
GO

SELECT x.RefProject, x.ProjectName, x.DateCreated, x.PlannedDueDate, T.Cnt
FROM Projects AS x
LEFT JOIN RefProjectCountView AS T WITH(NOEXPAND)
    ON T.RefProject = x.RefProject
LEFT JOIN ProjectUsers AS a
    ON x.RefProject = a.RefProject
WHERE a.RefUser = 1;

WITH(NOEXPAND) hint is needed for SQL Server to query view index and not to expand the full select statement.

相关问答

更多

相关文章

更多

最新问答

更多
  • 您如何使用git diff文件,并将其应用于同一存储库的副本的本地分支?(How do you take a git diff file, and apply it to a local branch that is a copy of the same repository?)
  • 将长浮点值剪切为2个小数点并复制到字符数组(Cut Long Float Value to 2 decimal points and copy to Character Array)
  • OctoberCMS侧边栏不呈现(OctoberCMS Sidebar not rendering)
  • 页面加载后对象是否有资格进行垃圾回收?(Are objects eligible for garbage collection after the page loads?)
  • codeigniter中的语言不能按预期工作(language in codeigniter doesn' t work as expected)
  • 在计算机拍照在哪里进入
  • 使用cin.get()从c ++中的输入流中丢弃不需要的字符(Using cin.get() to discard unwanted characters from the input stream in c++)
  • No for循环将在for循环中运行。(No for loop will run inside for loop. Testing for primes)
  • 单页应用程序:页面重新加载(Single Page Application: page reload)
  • 在循环中选择具有相似模式的列名称(Selecting Column Name With Similar Pattern in a Loop)
  • System.StackOverflow错误(System.StackOverflow error)
  • KnockoutJS未在嵌套模板上应用beforeRemove和afterAdd(KnockoutJS not applying beforeRemove and afterAdd on nested templates)
  • 散列包括方法和/或嵌套属性(Hash include methods and/or nested attributes)
  • android - 如何避免使用Samsung RFS文件系统延迟/冻结?(android - how to avoid lag/freezes with Samsung RFS filesystem?)
  • TensorFlow:基于索引列表创建新张量(TensorFlow: Create a new tensor based on list of indices)
  • 企业安全培训的各项内容
  • 错误:RPC失败;(error: RPC failed; curl transfer closed with outstanding read data remaining)
  • C#类名中允许哪些字符?(What characters are allowed in C# class name?)
  • NumPy:将int64值存储在np.array中并使用dtype float64并将其转换回整数是否安全?(NumPy: Is it safe to store an int64 value in an np.array with dtype float64 and later convert it back to integer?)
  • 注销后如何隐藏导航portlet?(How to hide navigation portlet after logout?)
  • 将多个行和可变行移动到列(moving multiple and variable rows to columns)
  • 提交表单时忽略基础href,而不使用Javascript(ignore base href when submitting form, without using Javascript)
  • 对setOnInfoWindowClickListener的意图(Intent on setOnInfoWindowClickListener)
  • Angular $资源不会改变方法(Angular $resource doesn't change method)
  • 在Angular 5中不是一个函数(is not a function in Angular 5)
  • 如何配置Composite C1以将.m和桌面作为同一站点提供服务(How to configure Composite C1 to serve .m and desktop as the same site)
  • 不适用:悬停在悬停时:在元素之前[复制](Don't apply :hover when hovering on :before element [duplicate])
  • 常见的python rpc和cli接口(Common python rpc and cli interface)
  • Mysql DB单个字段匹配多个其他字段(Mysql DB single field matching to multiple other fields)
  • 产品页面上的Magento Up出售对齐问题(Magento Up sell alignment issue on the products page)