AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-172794

user1930901's questions

Martin Hope
user1930901
Asked: 2020-06-06 09:39:07 +0800 CST

通过 SMSS 运行查询/作业 - SQL 服务和 SQL 代理服务帐户 (SQL Server)

  • 0

如果在我使用 Windows 身份验证登录登录会话时从 SQL Server Management Studio 执行命令(例如以下命令),我了解对路径“C:\SQL2019\BookStore.bak”的访问已完成通过 sql 服务帐户(在 SQL Server 配置管理器中设置)而不是通过我的登录。但是,如果完成了 INSERT 语句,在这种情况下是通过我的登录完成的吗?

BACKUP DATABASE [BookStore] TO  DISK = N'C:\SQL2019\BookStore.bak' 
WITH  COPY_ONLY, NOFORMAT, NOINIT,  NAME = N'BookStore-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

另外,我有一个代理作业集,并且在作业历史记录中显示“以用户身份执行:sqlagent1”,这是我在 SQL Server 配置管理器中设置的 sql 代理服务帐户。作业步骤属性中的运行方式为空。但是,在 SQL Server 中的登录名下没有为此帐户创建登录名。此帐户从哪里获得许可?

sql-server t-sql
  • 2 个回答
  • 277 Views
Martin Hope
user1930901
Asked: 2020-05-08 08:03:18 +0800 CST

计算表的总行大小 - SQL Server

  • 0

我在SQL Server中有一个具有以下架构的表“连接” :

[ID] [int] IDENTITY(1,1) NOT NULL,
[User] [nvarchar](20) NOT NULL,
[UserID] [int] NULL,
[True] [bit] NOT NULL,
[Comment] [nvarchar](max) NOT NULL,
[Created] [datetime] NOT NULL,
[Flag] [bit] NULL,
[Destination] [varchar](20) NULL

它在 ID 列上有一个主键聚集索引。

我需要每月获取此表上的条目生成的大小。我已经搜索了任何现有的 SP、函数或任何可以帮助我解决此问题的 DMV,但我只找到了如何获取表的大小而不是每行的大小。此外,我需要每月行的总大小,因此无法获得整个表上行的总大小/最小/最大值(如其他 stackexchange 帖子中提供的解决方案)。

我的尝试如下:

USE DB1;
SELECT DATEPART(year,created),
       DATEPART(month,created),
       (count (*))*(4+2*ISNULL((max(len([User]))),2)+4+1+2*ISNULL((max(len([Comment]))),2)+8+1+ISNULL(max(len([Destination])),2)) 'BytesPerMonth'
FROM Connections
GROUP BY DATEPART(year,created),DATEPART(month,created)

在上面我将行数乘以行的字节大小并考虑以下内容:

int - 4 bytes
nvarchar - 2 bytes per character ([nvarchar](max) also take 2 bytes per character, same as if we had [nvarchar](40), correct?)
bit - 1 byte
datetime - 8 bytes
varchar - 1 byte per character

但是,这仅提供了一个估计值,因为仅考虑了变量列的最大长度和(最大值)乘以行数,这导致比行的实际大小大得多的值。有没有办法在这种情况下获得每行的实际大小?

此外,我知道每行的行标题 - 每行另外 4 个字节(目前我没有包括这个,因为考虑到变量列的最大值,我的结果已经很大)。此外,我发现由于架构中的变量列,我应该考虑 3 个字节和 8 个字节,是否需要每行/每列考虑它们?如何计算索引的大小?

sql-server t-sql
  • 1 个回答
  • 4662 Views
Martin Hope
user1930901
Asked: 2020-04-24 11:42:18 +0800 CST

为过程引用的所有表生成 GRANT

  • 0

我的数据库中有几个存储过程,每个存储过程都从几个表中选择。我需要构造一个语句,我可以在其中给它一个存储过程,并为该存储过程使用的所有表获取授权选择语句。我需要这个,因为我的过程使用 sp_executesql,因此用户需要对表的显式权限,因为 sp_executesql 使得对存储过程的执行权限不够(您可能知道用户也需要对该 SP 使用的表的选择权限)。

到目前为止,我已经完成了以下动态 SQL 语句,但是,它仅在存储过程仅从一个表中选择时才有效。我完全理解,由于 where 子句中的子查询,它不再适用。

select 'GRANT SELECT ON [' + schema_name(schema_id) + '].[' + name + '] TO [User1]'
from sys.tables 
where name like (SELECT distinct t.name
FROM sys.sql_dependencies d 
INNER JOIN sys.procedures p ON p.object_id = d.object_id
INNER JOIN sys.tables     t ON t.object_id = d.referenced_major_id
where P.NAME LIKE 'myproc')

SP 使用超过 1 个表时出错:

子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。

存储过程使用的每个表所需的输出:

GRANT SELECT ON [dbo].[table1] TO [User1]

还有另一种方法可以实现这一目标吗?

sql-server stored-procedures
  • 1 个回答
  • 107 Views
Martin Hope
user1930901
Asked: 2019-04-29 04:12:49 +0800 CST

执行在 SQL Server 中选择并插入表的存储过程

  • 8

我对执行存储过程所需的权限有点困惑。例如,如果你有2个表和一个从Table1读取数据并将数据插入Table2的存储过程,那么对存储过程的执行权限和对表的选择权限就足够了吗?理论上,我发现这是作为解决方案给出的,但实际上我发现用户需要对存储过程的执行权限、对表的选择权限和对 Table2 的插入权限。

sql-server stored-procedures
  • 2 个回答
  • 3922 Views
Martin Hope
user1930901
Asked: 2019-04-17 00:59:57 +0800 CST

具有各自数据库名称的孤立用户[重复]

  • 0
这个问题在这里已经有了答案:
查找孤立用户 3 个答案
3年前关闭。

我需要获取每个数据库中孤立用户的列表,以及它们所在的数据库名称。我做了下面的操作,给出了每个数据库中的孤立用户,但我不知道如何在下一个包含另一列给每个用户找到显示在哪个数据库中。我尝试使用 DB_NAME() 但无济于事。

use master;
GO

CREATE PROCEDURE orphaned_u
AS
BEGIN
DECLARE @command varchar(1000) 
SELECT @command = 'use ? 
if DB_ID("?")>4
EXEC sp_change_users_login ''Report'' '
EXEC sp_MSforeachdb @command
END

CREATE TABLE tempTable (
    user nvarchar(1000),
    User_sid sql_variant 
)

INSERT INTO tempTable
EXEC master..orphaned_u

SELECT * FROM  dbo.tempTable 

我已经看过Find orphaned users但最好我使用上面的代码并找到一种方法在具有已内置存储过程 sp_change_users_login ''Report'' 的列中显示数据库名称

sql-server users
  • 1 个回答
  • 133 Views
Martin Hope
user1930901
Asked: 2019-04-03 04:49:34 +0800 CST

在扩展属性中获取数据库信息和值

  • 4

我需要从 SQL Server 获取每个数据库(连同其信息),我通过以下方式进行:

use master;
select *
from sys.databases
where database_id > 4 
order by name

我还需要从扩展属性中获取特定值。目前我正在手动执行以下 FOR EACH DB 以获取此值:

use <db_name>
select value from sys.extended_properties
where class_desc='DATABASE' and name = 'Application Name'

但是,我需要分别获取第一个查询显示的每个数据库的列中最后一个查询输出的值。这可以做到吗?

sql-server
  • 3 个回答
  • 473 Views
Martin Hope
user1930901
Asked: 2019-04-02 03:43:46 +0800 CST

向数据库用户授予权限 - SQL Server

  • 1

我需要向 TestDB 数据库上的 DB 用户 (TestUser) 授予选择和更新权限,如下所示。

在此处输入图像描述

当我按确定并重新检查权限时,它们不可见,如下所示:

在此处输入图像描述

根据我的测试,此处仅显示对象级别的权限(例如列等)。

可以通过执行 T-SQL 代码从某个地方看到数据库的选择权限吗?这是一个错误还是设计使然?这同样适用于用户定义的数据库角色权限,并且非常具有误导性。

sql-server users
  • 1 个回答
  • 118 Views
Martin Hope
user1930901
Asked: 2019-03-22 11:31:53 +0800 CST

将数据库添加到可用性组的问题

  • 3

我遇到了一个特定 AG 的问题,我在其中向 AG 添加了一个数据库(下面的 test123),并且在主要它会显示一切正常,如下所示:

在此处输入图像描述

但是,在辅助实例上,它会显示如下感叹号,并且不会添加到辅助实例上的 DB 列表中:

在此处输入图像描述

我还在错误日志中看到此消息:

无法访问可用性数据库“test123”,因为数据库副本不在 PRIMARY 或 SECONDARY 角色中。仅当数据库副本处于 PRIMARY 或 SECONDARY 角色时,才允许连接到可用性数据库。请稍后再试操作。不合格的事务正在数据库 test123 中回滚,以进行 Always On 可用性组状态更改。预计回滚完成:100%。这只是一条信息性消息。无需用户操作。

我正在使用自动播种来填充辅助数据库上的数据库。

我已将相同的数据库添加到不同的AG,但没有发生此问题,并且已成功添加。

数据库处于完全恢复模式,并且已进行完全备份,并且满足先决条件。AG和听众看起来很好,任何想法可能是什么原因?

sql-server sql-server-2016
  • 1 个回答
  • 10630 Views
Martin Hope
user1930901
Asked: 2019-02-20 06:41:35 +0800 CST

用于迁移服务器角色权限的脚本 - SQL Server

  • 0

我需要为我的 SQL Server 实例中所有用户定义的服务器角色获取一个脚本,并为其分配权限,如下所示:

GRANT ALTER ANY AVAILABILITY GROUP TO [ServerRole1]

到目前为止我所做的是:

SELECT ' GRANT ' + SPerm.permission_name + ' TO '  + SP.name -- + ' '' ' AS Commands_To_Execute 
FROM sys.server_principals SP 
  JOIN sys.server_permissions SPerm 
    ON SP.principal_id = SPerm.grantee_principal_id 
    where sp.type='R' and sp.name!='public'

但我在 SELECT 语句第 1 列的添加运算符中收到错误无法解决“SQL_Latin1_General_CP1_CI_AS”和“Latin1_General_CI_AS_KS_WS”之间的排序规则冲突。

然后我尝试如下解决它我收到错误“表达式类型 int 对于 COLLATE 子句无效”:

SELECT ' GRANT ' + SPerm.permission_name + ' TO '  + SP.name -- + ' '' ' AS Commands_To_Execute 
FROM sys.server_principals SP 
  JOIN sys.server_permissions SPerm 
    ON SP.principal_id collate SQL_Latin1_General_CP1_CI_AS  = SPerm.grantee_principal_id collate SQL_Latin1_General_CP1_CI_AS 
    where sp.type='R' and sp.name!='public'
sql-server permissions
  • 1 个回答
  • 358 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve