我正在开发一个运行SQL服务器的产品,该服务器允许某些应用程序登录,并且他们的登录被授予运行存储过程的权限 - 并且没有ELSE.存储过程由管理员拥有; 存储过程接受查询并执行它,然后将结果返回给应用程序.
遗憾的是,我无法弄清楚为什么应用程序可以调用它被授予访问权限的存储过程,但是存储过程无法执行传递给它的SQL语句.
当我以管理员身份登录时,存储过程执行传入的查询,但是当我以受限用户身份登录时,它会在execute语句中抛出异常.
例如:
EXEC [Admin].[STORED_PROC] @SQL_STATEMENT = 'SELECT * FROM table_x'
Run Code Online (Sandbox Code Playgroud)
STORED_PROC看起来像这样:
BEGIN TRY
EXEC (@SQL_STATEMENT)
END TRY
BEGIN CATCH
-- some logging when an exception is caught, and the exception is caught here!!!
END CATCH
Run Code Online (Sandbox Code Playgroud)
try catch语句中没有任何内容,除了EXEC ...和SQL_STATEMENT在我以管理员身份登录时有效,但在我以用户身份登录时却无效.
任何人都可以帮我弄清楚我需要设置哪些权限才能允许用户只通过存储过程运行查询?
因此,有一些关于允许通过存储过程执行原始SQL语句的注释违背了使用存储过程的目的...但实际上我们实际上正在做的是我们将加密的SQL语句传递给存储过程并且存储的proc获取语句解密,然后它执行它.
所以是的,实际上原始SQL语句不安全,它们无法实现存储过程的目的,但我不知道如何加密通过ODBC传递并针对2005之前的SQL Server运行的SQL查询.
无论如何,我试图提出一些最小的保护措施,至少要有一些基本的安全措施.
我有一个简单的购物车模型,其中包含一个项目列表:
public class ShoppingCart
{
public List<Item> Items { get; set; }
public double Tax { get; set; }
// ... some other properties
}
public class Item
{
public string Name { get; set; }
public int Quantity { get; set; }
public double Price { get; set; }
public double TotalCost { get { return Quantity * Price; } }
}
Run Code Online (Sandbox Code Playgroud)
我想修改特定项目的数量,我已经制作了以下视图:
<%using (Html.BeginForm("Recalculate", "ShoppingCart", Model))
{ %>
<table id="cartTable" border ="5px" cellpadding="5px" cellspacing="5px" width="640">
<tr>
<td><b>Item Name</b></td> …Run Code Online (Sandbox Code Playgroud) 我有两个类,一个是Circle(),另一个是GeometricObject().我必须将GeometricObject扩展为circle,然后在GeometricObject中实现可比较.当我这样做时,我的Circle()类中出现错误,该错误表示无法覆盖抽象方法,而Circle()不是抽象的.我还必须在测试/主类中比较两者,任何人都有任何关于如何修复错误并比较两者的想法?提前致谢.
package chapter_14;
public class Circle extends GeometricObject{ //here is where i get an error
private double radius;
public Circle() {
}
public Circle(double radius) {
this.radius = radius;
}
/** Return radius */
public double getRadius() {
return radius;
}
/** Set a new radius */
public void setRadius(double radius) {
this.radius = radius;
}
/** Return area */
@Override
public double getArea() {
return radius * radius * Math.PI;
}
/** Return diameter */
public double getDiameter() { …Run Code Online (Sandbox Code Playgroud) 据我所知,使用像try/catch/finally这样的工作,所以我希望如果在using语句中发生异常它会被捕获(这有点奇怪,因为这也意味着异常被默默地吃掉了).using语句应该捕获异常并调用Dispose方法,但是,没有发生.我已经设计了一个简单的测试来证明这个问题.
这是我强制在using语句中发生异常的地方:
using (TcpClient client = new TcpClient())
{
// Why does this throw when the using statement is supposed to be a try/catch/finally?
client.Connect(null);
}
Run Code Online (Sandbox Code Playgroud)
抛出异常client.Connect()(意味着它没有被using语句捕获或者被重新抛出):
System.ArgumentNullException: Value cannot be null.
Parameter name: remoteEP
at System.Net.Sockets.TcpClient.Connect(IPEndPoint remoteEP)
at DotNETSandbox.Program.Main(String[] args) in C:\path\to\Sandbox\Program.cs:line 42
Run Code Online (Sandbox Code Playgroud)
根据微软关于该主题的文章,如果Dispose方法抛出,则可能会抛出using语句.
但是,当我遵循使用模式时,显然Dispose方法不会抛出:
TcpClient c2 = new TcpClient();
try
{
c2.Connect(null);
}
catch (Exception e)
{
// We caught the null ref exception
try
{
// Try to dispose: …Run Code Online (Sandbox Code Playgroud) 我试图为以下陈述构建一个对立面:如果A为0或B为0,则A*B为0.
这是我的尝试:如果A*B不为0,则A不为0或B不为0.
原始陈述是正确的,但是对立面是错误的,因为A 和 B必须非零才能使A*B非零......我做错了什么?
今天是2010年2月9日星期二,当我打印日期时,我收到了错误的日期:
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date today = formatter.parse(String.format("%04d-%02d-%02d",
Calendar.getInstance().get(Calendar.YEAR),
Calendar.getInstance().get(Calendar.MONTH),
Calendar.getInstance().get(Calendar.DAY_OF_MONTH)));
System.out.println("Today is " + today.toString());
Run Code Online (Sandbox Code Playgroud)
打印行导致:"今天是2010年1月9日00:00:00 CST 2010"
它肯定不是09年1月9日星期六,也就是2月9日星期二.我假设我做错了什么,所以有人能让我知道这里有什么问题吗?我是否必须手动设置星期几?
更新
注意:我今天不想初始化,new Date()因为我希望初始化为小时,分钟,秒和毫秒0.这是必要的,所以我可以将用户输入日期与今天进行比较:如果用户输入今天的日期并且我使用格式化程序来构造Date对象,那么如果我今天初始化new Date()并且我比较两个日期 - 今天将在用户之后选定日期(不正确).因此,我需要在没有hr/min/sec/ms的情况下在今天开始时进行初始化.
例如,我有多种物体Car.
我是否在继承的类/子类中有各种类型Car?
我是否将这些放在cartype命名空间下,以免弄乱主命名空间?
后来当我需要一系列汽车时,我应该将其声明为var currentCars():Car或var currentCars():Object?前者会支持Car的任何子类吗?
当有一个具有相同基名的文件时,这个问题以前曾被问到隐藏.js和.js.map文件.ts。答案是您将 VS Code 设置设置为 exclude "**/*.js": {"when": "$(basename).ts"}。
但是,我想知道.js当基本名称是.ts或时如何隐藏文件.tsx。我需要 VS Code 来检查任一扩展。
基本上我需要同时拥有"**/*.js": {"when": "$(basename).ts"}和"**/*.js": {"when": "$(basename).tsx"}。关于如何完成这项工作的任何想法?
java ×2
asp.net-mvc ×1
c# ×1
date ×1
date-format ×1
exception ×1
forms ×1
grant ×1
inheritance ×1
logic ×1
math ×1
model ×1
namespaces ×1
oop ×1
sql ×1
sql-server ×1
truthtable ×1
try-catch ×1
typescript ×1